web-dev-qa-db-de.com

Befehlsausgabe umleiten zu Datei und Terminal

Ich versuche, Befehlsausgabe in Datei plus Konsole auch zu werfen. Das liegt daran, dass ich die Ausgabe in einer Datei aufzeichnen möchte. Ich mache folgendes und es wird an die Datei angehängt, aber es wird keine ls Ausgabe auf dem Terminal gedruckt.

$ls 2>&1 > /tmp/ls.txt
58
Satish

Ja, wenn Sie die Ausgabe umleiten, wird sie nicht in der Konsole angezeigt. Verwenden Sie tee.

ls 2>&1 | tee /tmp/ls.txt
92
Karoly Horvath

Erwähnenswert ist, dass 2> & 1 bedeutet, dass der Standardfehler zusammen mit der Standardausgabe ebenfalls umgeleitet wird. So

someCommand | tee someFile

gibt nur die Standardausgabe in der Datei aus, aber nicht den Standardfehler: Der Standardfehler wird nur in der Konsole angezeigt. Um auch Standardfehler in der Datei zu erhalten, können Sie verwenden

someCommand 2>&1 | tee someFile

(Quelle: In der Shell, was ist "2> & 1"? ). Schließlich kürzen beide oben genannten Befehle die Datei und beginnen mit dem Löschen. Wenn Sie eine Folge von Befehlen verwenden, möchten Sie möglicherweise die Ausgabe und den Fehler aller Befehle nacheinander abrufen. In diesem Fall können Sie mit -a flag den Befehl "tee" ausführen:

someCommand 2>&1 | tee -a someFile
26
Serge Rogatch

Falls jemand die Ausgabe anhängen und nicht überschreiben muss, kann die Option "-a" oder "--append" des Befehls "tee" verwendet werden:

ls 2>&1 | tee -a /tmp/ls.txt
ls 2>&1 | tee --append /tmp/ls.txt
11
Farah