Wie kann ich feststellen, ob ein Prozess stdout oder stderr ausgibt?
22
Ich kenne nur drei Möglichkeiten, um zu bestimmen, was ein Programm an STDOUT und was an STDERR ausgibt
Lesen Sie die Dokumentation. Oder
Experimentieren Sie mit der Umleitung †
†Beispielsweise:
program > program.stdout 2> program.stderr
Schauen Sie sich dann die beiden Ausgabedateien an, um zu sehen, was das Programm in STDOUT und was in STDERR geschrieben hat.
Anstelle der Umleitung können Sie eine Pipe-Funktion verwenden, um tee
die Ausgabe auf dem Bildschirm und in einer Datei fortzusetzen. Siehe /programming//q/692000/477035
program | grep .
STDOUT wird rot gedruckt.Basierend auf Ihrer kommentierten Anfrage:
quelle
stdout
und 2 =stderr
) zu verwenden, um die Ausgabe des inneren Satzes von Klammern zu übernehmen undstdout
einensed
Befehl auszuführen , während erstderr
durchläuft eine andere.{ { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Sie können stderr einfach in eine Datei umleiten, und wenn etwas darin auftaucht, ist es von stderr.
z.B
ls -a 2> ls-all.txt
Wenn aus irgendeinem Grund ein Fehler an stderr gesendet wurde, wird er in diese Datei umgeleitet.
quelle
Wenn Sie dies einmal tun möchten, leiten Sie einen von ihnen an eine andere Stelle um.
B. Umleitung Standard raus mit
>
.ls -al> ls-l.txt (jede Ausgabe hier ist nicht von stdout, wenn Sie etwas sehen, muss es eine stderr-Ausgabe sein)
Für die stderr Umleitung verwenden
2>
quelle