Ich möchte die Ausgabe eines Befehls im Terminal sehen, als gäbe es keine Umleitung. Außerdem muss stderr zu err.log und stdout zu stdout.log umgeleitet werden.
Es wäre schön, wenn Sie auch die exakte Kopie dessen, was im Terminal angezeigt wird, dh Fehler, die gedruckt werden, wenn sie auftreten, in einer separaten Datei haben würden: stdouterr.log.
bash
logs
io-redirection
balki
quelle
quelle
Antworten:
Verwenden Sie den
tee
Befehl wie folgt:3>&1 1>&2 2>&3
So tauschen Sie stderr und stdout aus, weil tee nur stdout akzeptieren kann.Werfen Sie einen Blick auf den Unix-Befehl tee, um erweiterte Umleitungen mit zu erhalten
tee
.quelle
cmd
durch(cmd ; echo >exit_code.txt $?)
.((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log)
Ich halte es für eine großartige Idee, stdout und stderr in zwei verschiedenen Dateien zu protokollieren. Werden die Protokolle nicht asynchron? Also habe ich folgendes ausprobiert:
((cmd | tee stdout.log) 3>&1 1>&2 2>&3 | tee stderr.log) &> all.log
in einem anderen Terminal
quelle
&| tee all.log
am Ende des Befehls statt&> all.log
&|
. Ich verstehe&>
,|&
auch, aber was bedeutet&|
in diesem Zusammenhang? Ich konnte keine passende Syntaxreferenz finden, nicht im|&
@dogbane, Danke.
Ich habe auch einen anderen Weg gefunden, bei dem beide Streams ungefähr in der Reihenfolge gespeichert werden, in der sie ohne Umleitung gedruckt würden.
command 2> >(tee errlog | tee -a bothLog > /dev/tty ) | tee outlog | tee -a bothLog
Dies funktioniert jedoch nur mit den Shells, die die Prozessersetzung unterstützen.
quelle
Versuche dies :
quelle