Bestimmen Sie, ob die Ausgabe stdout oder stderr ist


Antworten:


22

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

  1. Lesen Sie die Dokumentation. Oder

  2. Experimentieren Sie mit der Umleitung †

  3. drucke STDERR in rot

†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 teedie Ausgabe auf dem Bildschirm und in einer Datei fortzusetzen. Siehe /programming//q/692000/477035


15
Normalerweise verwende ich eine Variante von Option 3: program | grep .STDOUT wird rot gedruckt.
Dennis

Rot zu drucken ist genau das, wonach ich gesucht habe. Thanks RedGrittyBrick & Dennis
Rauffle

7

Basierend auf Ihrer kommentierten Anfrage:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
Sieht beeindruckend aus. Aber hätten Sie etwas dagegen, die Kirschen zu Ihrem Baum hinzuzufügen und zu erklären, was er tut? Nicht jeder hier ist ein Guru - und dein Konstrukt ist ziemlich komplex;)
Izzy

Die Klammern dienen zur Bestellung. Ich habe tatsächlich genau diese Form von I-forget-where erhalten, aber es geht darum, zusätzliche Dateideskriptoren (jenseits von 1 = stdoutund 2 = stderr) zu verwenden, um die Ausgabe des inneren Satzes von Klammern zu übernehmen und stdouteinen sedBefehl auszuführen , während er stderrdurchläuft eine andere.
Zebediah49

Wow. Wusste nicht, diese zusätzlichen Deskriptoren zu verwenden. Zuerst war ich ein bisschen verwirrt (ich verstehe gerne, was ich laufe - und bin ein bisschen verwirrt mit den geschweiften Klammern). Aber jetzt ist es klar - und meiner Meinung nach genau das, was der OP wollte. Also +1 von mir :)
Izzy

Das hat mir geholfen. Ich wollte mehr Daten in stderr hinzufügen. Dies erledigt das und gibt alles korrekt auf stdout / stderr aus. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery

0

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.


-1

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>


Der Prozess erzeugt einen konstanten Strom von Ausgaben, von denen einige stdout und andere stderr sind. Ich möchte bestimmen, welche welche ist, da diese Ausgabe auf den Bildschirm geht
Rauffle
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.