Bash-Kommando gibt eine Nachricht auf stderr
Möchte ich wissen, ob es ein eingebautes BASH-Kommando gibt text auf stderr, genau wie die echo
Kommando gibt text auf stdout aus. Ich will nicht von temporären io-Umleitung. Ich benutze einen eingebauten Befehl zum generieren einer Fehlermeldung auf stderr wie ls --asdf
(ls: unrecognized option '--asdf') ich will aber etwas ordentlicher.
Bearbeiten ----
Eigentlich bin ich versucht zu zeigen, stderr/stdout Umleitung, und mein Beispiel sieht wie folgt aus:
sh test.sh >test-out.txt 2>test-err.txt
Zur Klarheit, ich will die test.sh Datei so einfach und sauber wie möglich, dies bedeutet die Vermeidung >
Betreiber in der Datei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
echo something >&2
ist der richtige Weg, das zu tun, was Sie wollen.Jedoch...
Diese erstellen ein kleines Programm, mit dem echo Ihre Argumente zu
stderr
:Können Sie es verwenden, wie diese:
if (argc > 1) fprintf (stderr, "\n");
um zu verhindern, dass eine streunende newline zustderr
wenn kein input gegeben.echo
tut.Nicht vordefiniert, die Sie verwenden könnten:
Könnte man auch einen alias.
echoerr foo 2> test-err.txt
da der alias wird erweitert, dann sind beide Umleitungen sind eingerichtet zur gleichen Zeit und im zweiten weiß man nicht, die erste wurde noch einrichten. Aliase sollten vermieden werden in Skripten - verwenden von Funktionen statt.Niemand hat erwähnt, aber Sie können dies auch tun:
echo An error message > /dev/stderr
Ist es eventuell besser lesbar als
>&2
aber ich denke, das hängt davon ab, wer Sie sind.Nur nebenbei bemerkt: Wenn Sie möchten, um zu demonstrieren, bash, sollten Sie verwenden die bash, nicht sh:
Selbst wenn sh ist ein link auf bash auf Ihrem system, wird es prüfen, wie es genannt wurde (arg0) und Behandlung von sh-Aufrufe, wie eine Anrufung
führt manchmal subtil anders Verhalten. Ein weit verbreiteter Irrtum, wie shebangs #/bin/sh ', aber es hat funktioniert in der shell' (die /bin/bash).
Im Allgemeinen, ich denken, dass es nicht wirklich einen Unterschied zwischen "temporären io-Umleitung" und das, was Sie wollen. stderr ist eine Datei-Deskriptor wie jeder andere, und jeder vordefiniert, die tut, was Sie wollen, nur tun die gleiche Sache intern, die Sie umleiten, echo, wie Jürgen oben vorgeschlagen, nämlich, aufrufen von write() auf.