Ich weiß so viel:
$ command 2>> error
$ command 1>> output
Gibt es eine Möglichkeit, den stderr in die Fehlerdatei und den stdout in die Ausgabedatei in derselben Bash-Zeile auszugeben?
Ich weiß so viel:
$ command 2>> error
$ command 1>> output
Gibt es eine Möglichkeit, den stderr in die Fehlerdatei und den stdout in die Ausgabedatei in derselben Bash-Zeile auszugeben?
Antworten:
Fügen Sie sie einfach in einer Zeile hinzu command 2>> error 1>> output
Beachten Sie jedoch, dass dies >>
zum Anhängen dient, wenn die Datei bereits Daten enthält. Während, >
werden alle vorhandenen Daten in der Datei überschreiben.
Also, command 2> error 1> output
wenn Sie nicht anhängen möchten.
Nur zur Vervollständigung können Sie so schreiben, 1>
als ob >
der Standard-Dateideskriptor die Ausgabe ist. so 1>
und >
ist das gleiche.
So command 2> error 1> output
wird,command 2> error > output
command &2>err.log
, ich denke, ich bin total verwirrend Sintaxien. (Ein Link zu einer angemessenen Antwort aller Bash-Pipe-Ismen könnte in Ordnung sein)
command &2>err.log
es nicht ganz legitim - das kaufmännische Und in dieser Syntax wird für den Dateideskriptor als Ziel verwendet, z. B. command 1>&2
würde stdout zu stderr umgeleitet.
Versuche dies:
your_command 2>stderr.log 1>stdout.log
Die Ziffern 0
durch 9
sind Dateideskriptoren in Bash.
0
steht für Standardeingabe, 1
steht für Standardausgabe, 2
steht für Standardfehler. 3
bis 9
sind für jede andere vorübergehende Verwendung frei.
Jeder Dateideskriptor kann mithilfe des Operators in eine Datei oder in einen anderen Dateideskriptor umgeleitet werden >
. Sie können stattdessen den Operator verwenden >>
, um an eine Datei anzuhängen, anstatt eine leere zu erstellen.
Verwendung:
file_descriptor > filename
file_descriptor > &file_descriptor
Weitere Informationen finden Sie im Advanced Bash-Scripting-Handbuch: Kapitel 20. E / A-Umleitung .
So wie das:
$ command >>output 2>>error
Oder wenn Sie Ausgaben (stdout & stderr) in einer einzigen Datei mischen möchten, möchten Sie möglicherweise Folgendes verwenden:
command > merged-output.txt 2>&1
Die Ausgabe mehrerer Befehle kann umgeleitet werden. Dies funktioniert entweder für die Befehlszeile oder am nützlichsten in einem Bash-Skript. Das -s
leitet die Passwortabfrage auf den Bildschirm.
Hereblock cmds stdout / stderr werden an separate Dateien gesendet und nichts angezeigt.
sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF
Hereblock cmds stdout / stderr werden an eine einzelne Datei gesendet und angezeigt.
sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF
Hereblock cmds stdout / stderr werden an separate Dateien gesendet und stdout zur Anzeige.
sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF
Abhängig davon, wer Sie sind (whoami) und Benutzername, kann ein Passwort erforderlich sein oder nicht.
1>
geschrieben werden kann als>