Stellen Sie fest, ob die Ausgabe stdout oder stderr ist

12065
Rauffle

Wie kann ich feststellen, ob ein Prozess stdout oder stderr ausgibt?

19

4 Antworten auf die Frage

20
RedGrittyBrick

Es gibt nur drei Möglichkeiten, um zu bestimmen, was ein Programm an STDOUT und was an STDERR ausgibt

  1. Lesen Sie die Dokumentation. Oder

  2. Experiment mit Umleitung †

  3. STDERR in rot drucken

†Zum Beispiel:

program > program.stdout 2> program.stderr

Sehen Sie sich dann die beiden Ausgabedateien an, um zu sehen, was das Programm in STDOUT geschrieben hat und was es in STDERR geschrieben hat.

Anstelle einer Umleitung können teeSie auch per Pipe weiterleiten, wenn Sie die Ausgabe benötigen, um zum Bildschirm sowie in eine Datei zu gelangen. Siehe https://stackoverflow.com/q/692000/477035

Normalerweise verwende ich eine Variante von Option 3: `program | grep .` druckt STDOUT in rot. Dennis vor 11 Jahren 13
Das Drucken in Rot ist so ziemlich genau das, wonach ich gesucht habe. Danke an RedGrittyBrick & Dennis Rauffle vor 11 Jahren 0
5
zebediah49

Based on your commented request:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /' 
Sieht beeindruckend aus. Aber würden Sie etwas dagegen haben, die Kirschen Ihrem Baum hinzuzufügen und zu erklären, was er tut? Nicht jeder hier ist ein Guru - und dein Konstrukt ist ziemlich komplex;) Izzy vor 11 Jahren 3
Die Klammern dienen zur Bestellung. Ich habe diese genaue Form tatsächlich von I-forget-where erhalten, aber es geht darum, zusätzliche Dateideskriptoren zu verwenden (jenseits von 1 = `stdout` und 2 =` stderr`), um die Ausgabe des inneren Satzes von Klammern zu übernehmen und `auszuführen stdout` durch einen "sed" -Befehl, während "stderr" einen anderen Befehl durchläuft. zebediah49 vor 11 Jahren 0
Beeindruckend. Ich wusste nicht, diese zusätzlichen Deskriptoren zu verwenden. Zuerst war ich etwas verwirrt (ich verstehe gerne, was ich renne - und bin etwas verwirrt mit den geschweiften Klammern). Aber jetzt ist es klar - und IMHO genau das, was das OP wollte. Also +1 von mir :) Izzy vor 11 Jahren 0
This helped me. I wanted to add more data into stderr. This does that and properly outputs everything back on stdout/stderr. `{ { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '' 1>&3; } 3>&2 2>&1; }` Bryan Drewery vor 11 Jahren 0
0
Hennes

Wenn Sie dies einmal tun möchten, leiten Sie eine von ihnen an einen anderen Ort um.

Beispiel, Standard umleiten mit >.

ls -al> ls-l.txt (jede Ausgabe hier stammt nicht von stdout, wenn Sie etwas sehen, muss es eine stderr-Ausgabe sein)

Für stderr-Weiterleitung verwenden 2>

Der Prozess erstellt einen konstanten Ausgabestrom, der einige für stderr bereitstellt. Ich möchte feststellen, welche ist, da diese Ausgabe auf dem Bildschirm angezeigt wird Rauffle vor 11 Jahren 0
0
magna_nz

Sie können stderr einfach in eine Datei umleiten, und wenn etwas darin angezeigt wird, ist es von stderr.

z.B ls -a 2> ls-all.txt

Wenn aus irgendeinem Grund ein Fehler an stderr gesendet wurde, wird der Fehler in diese Datei umgeleitet.