12
votes

Commande bash qui imprime un message sur stardr

Je veux savoir s'il existe une commande Bash intégrée qui imprime du texte sur stardr, comme la commande echo imprime le texte sur stdout. Je ne veux pas utiliser Io-redirection temporaire. J'utilise une commande intégrée pour générer une erreur sur stardr telle que ls -asdf (LS: Option non reconnue '--astdf') mais je veux quelque chose de Néater.

Editer --- -

En fait, j'essaie de démontrer la redirection STDERR / STDOUT, et mon exemple ressemble à: xxx

pour la clarté, je veux garder le test. SH fichier aussi simple et propre que possible, cela signifie éviter l'opérateur > dans le fichier.


0 commentaires

6 Réponses :


3
votes

Aucun intégré, vous pouvez utiliser:

function echo-err { echo "$@" >&2; }


0 commentaires

0
votes

En général, je pense qu'il n'y a pas vraiment une différence entre «Io-redirection temporaire» et la chose que vous voulez. STDERR est un descripteur de fichier comme n'importe quel autre, et tout intégré qui fait ce que vous voulez faire de la même chose à l'interne que vous faites en redirectant Echo comme Jurgen suggéré ci-dessus, à savoir, appelant écrit () sur elle.


0 commentaires

3
votes

Vous pouvez également faire un alias.

alias echoerr='echo >&2'


1 commentaires

Cela ne fonctionnera pas pour ECHOER FOO 2> TEST-ERRTXT Étant donné que l'alias est élargi, les deux redirections sont configurées en même temps et le second ne savait pas que le premier a été Configurer encore. Les alias doivent être évités dans les scripts - utilisez des fonctions à la place.



12
votes

echo quelque chose> & 2 est la bonne façon de faire ce que vous voulez.

Cependant ...

Cela créera un petit programme qui fera écho à ses arguments. stardr : xxx

Vous pouvez l'utiliser comme ceci: xxx


3 commentaires

Vous voudrez peut-être ajouter: si (argc> 1) fprintf (stardr, "\ n"); pour empêcher une nouvelle ligne errante de starr lorsqu'aucune entrée donnée.


@ DAVIDC.RANKIN: Je pense que c'est une bonne idée. Cependant, comme il se trouve, il génère une nouvelle ligne lorsque aucun argument n'est présent de la même manière que echo fait.


Oui, j'ai vu cela aussi, mais je pensais que si nous faisions quelque chose de coutume, nous pourrions le faire fonctionner une litière mieux :) J'ai testé les deux manières, et j'aime supprimer la nouvelle ligne en cas d'aucune entrée. D'autres peuvent aimer la ligne vide.



1
votes

Juste un Sidenote: Si vous aimez démontrer Bash, vous devez utiliser Bash, pas SH:

bash --posix 


0 commentaires

4
votes

Personne n'a mentionné cela, mais vous pouvez aussi faire ceci:

echo un message d'erreur> / dev / stardr

Il est peut-être plus lisible que > & 2 mais je suppose que cela dépend de qui vous êtes.


1 commentaires

Clairement, vous avez donné la réponse la plus simple et la plus lisible.