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 .