Nehmen wir an, ich führe einen Befehl oder ein Shell-Skript aus, und es gibt mir eine Ausgabe. Ohne die Interna dieses Befehls oder Shell-Skripts zu kennen, wie kann man feststellen, ob die Ausgabe von stderr
stammt oder stdout
?
Zum Beispiel,
$ ls -ld /
drwxrwxr-t 35 root admin 1258 Dec 11 19:16 /
gegen
ls -ld /test
ls: /test: No such file or directory
Wie stelle ich fest, dass der erste Befehl auf stdout
gedruckt wurde und die zweite an stderr
(hat es?)?
Akzeptierte Antwort:
Es gibt keine Möglichkeit zu sagen, wann die Ausgabe bereits gedruckt wurde. In diesem Fall sind sowohl stdout
und stderr
mit dem Terminal verbunden sind, so dass die Information, in welchen Stream geschrieben wurde, bereits verloren war, als der Text auf Ihrem Terminal erschien; Sie wurden vom Programm kombiniert, bevor sie es jemals zum Terminal geschafft haben.
Was Sie in einem Fall wie dem obigen tun können, wäre, den Befehl mit stdout
auszuführen und stderr
an verschiedene Orte umgeleitet und sehen, was passiert. Oder führen Sie es zweimal aus, einmal mit stdout
nach /dev/null
umgeleitet und einmal mit stderr
nach /dev/null
umgeleitet , und sehen Sie, in welchen dieser Fälle der Text angezeigt wird.
Sie können stdout
umleiten nach /dev/null
durch Anheften von >/dev/null
am Ende der Befehlszeile, und Sie können stderr
umleiten nach /dev/null
durch Hinzufügen von 2>/dev/null
.