Stdout aus zwei Programmen umleiten


9

Ich führe ein Speicherüberprüfungstool (prog1) auf einem C ++ - Code (prog2) aus, die mir beide eine riesige und detaillierte Ausgabe liefern. Um einige Fehler zu beseitigen, muss ich diese Ausgabe in einer Datei speichern.

Ich habe versucht, das Standardout in eine Datei umzuleiten:

prog1 prog2 > outfile.txt

Aber das gibt mir eine Datei, die die Ausgabe von prog2 enthält, während die Ausgabe von prog1 noch an das Terminal geht.

Kennt jemand eine Möglichkeit, anzugeben, dass BEIDE Ausgaben in eine Datei verschoben werden sollen? Wie (prog1 prog2) > outfile.txt?

Antworten:


19

Es besteht eine gute Chance, dass prog1die Ausgabe in einen Standardfehler geschrieben wird. Sie können beide Ausgaben mit in eine einzelne Datei umleiten

prog1 prog2 > outfile.txt 2>&1

oder Sie können die Ausgänge mit teilen

prog1 prog2 > outfile.txt 2> errors.txt

Dies trennt nicht die Ausgabe der einzelnen Programme , sondern die Ausgabekanäle. Siehe Was sind die Steuerungs- und Umleitungsoperatoren der Shell? für Details.

Wenn Sie sich prog1die Dokumentation ansehen , finden Sie möglicherweise eine Option, mit der Sie festlegen können, dass die Ausgabe stattdessen in einer benannten Datei gespeichert werden soll. Zum Beispiel mit strace,

strace -o strace.txt prog2 > outfile.txt

würde stracedie Ausgabe in speichern strace.txtund alles, was in die Standardausgabe geschrieben wurde, in outfile.txt.


5
2>&1muss gehen nach > outfile.txt . Die Reihenfolge der Weiterleitungen ist wichtig.
Barmar

Hinweis für zukünftige Leser: @Barmar ist absolut richtig, dass die relative Reihenfolge der Weiterleitungen in Bezug aufeinander wichtig ist. Für weniger vertraute Personen ist die Reihenfolge der Weiterleitungen in Bezug auf Programmargumente nur in wenigen Fällen von Bedeutung. Anfang und Ende sind übliche Orte, aber manchmal passiert auch die Mitte (bitte nicht tun). echo >&2 hello worldist äquivalent zu echo hello world >&2. Weitere Infos hier: tldp.org/LDP/abs/html/io-redirection.html
Morgen
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.