Okay. Wenn ich die Ausgabe eines Programms in eine Datei umleiten wollte, würde ich so etwas tun
prog > file
Wenn ich sowohl stdout als auch stderr in diese Datei umleiten wollte, würde ich tun
prog > file 2>&1
Das ist alles in Ordnung und gut, wenn die Ausgabe in die Datei gehen soll. Aber was ist, wenn die Ausgabe in die Datei und dennoch in stdout / stderr erfolgen soll? Die Ausgabe wird also in der Datei gespeichert, Sie können sie jedoch weiterhin auf der Konsole sehen, während das Programm ausgeführt wird. Gibt es eine Möglichkeit, das zu tun? Und wenn ja, wie?
shell
io-redirection
Jonathan M Davis
quelle
quelle
stdout
ist Dateideskriptor 1 undfoo > some_file
bedeutet, dass ein schreibgeschützter Dateideskriptor, der auf "some_file
foo's stdout" geöffnet ist. stdout geht immer zu stdout.Antworten:
tee
existiert zu diesem Zweck; Es verwendet ein Dateinamenargument und schreibt die von stdin gelesenen Daten sowohl in stdout als auch in die Datei:quelle
prog |& tee file
.prog |& tee /dev/tty > file
, was in der Mitte einer Pipeline nützlich sein kann, z. B.foo |& tee /dev/tty | sed 's/.*\r//' > foo.log
Statuszeilenfortschrittsaktualisierungen auf Ihrem Terminal anzeigen, diese jedoch aus einer Protokolldatei herausfiltern. Oder verwenden Sie es, um eine Pipeline zu debuggen, die Sie gemeinsam hacken, indem Sie die Daten an diesem Punkt anzeigen lassen.