Ich bin mir nicht sicher, wie ich am besten beide STDERR
und STDOUT
dieselbe Datei mit erfassen soll tee
. Ich weiß, dass ich, wenn ich zu einer Datei leiten möchte, das Dateihandle nach der Umleitung zuordnen muss, d. H.
find . >/tmp/output.txt 2>&1
Dies weist die Schale zu senden STDOUT
an /tmp/output.txt
und dann zu senden , STDERR
um STDOUT
(das nun das Senden /tmp/output.txt
).
Der Versuch, das auszuführen, 2>&1
bevor die Datei umgeleitet wird, hat nicht den gewünschten Effekt.
Wenn ich jedoch Pipe verwenden möchte, tee
sollte es sein:
find . |tee /tmp/output.txt 2>&1 # or
find . 2>&1 |tee /tmp/output.txt # ?
|&
verwendet, wird der Standardfehler von Befehl1 über die Pipe mit der Standardeingabe von Befehl2 verbunden2>&1 |
. Dies ist eine Abkürzung für . Diese implizite Umleitung des Standardfehlers wird nach allen durch den Befehl angegebenen Umleitungen ausgeführt."stderr
als auchstdout
in dieses Problem schreibt . Die Umleitungs->
und Tee-|
Operatoren unterscheiden sich, wenn versucht wird, beide Ausgabestreams zu erfassen. Für die Umleitung musste ich./testapp > /tmp/out.log 2>&1
. Während für Tee musste ich./testapp 2>&1 | tee /tmp/out.log
.|
normalerweise als Rohrbetreiber bezeichnet.tee
bezieht sich nur auf das bestimmte Programm, das am anderen Ende der Pipe aufgerufen wird.