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.