886 Stimmen

Alle Ausgaben in der Bash in eine Datei umleiten

Ich weiß, dass ich unter Linux, um die Ausgabe vom Bildschirm in eine Datei umzuleiten, entweder die Funktion > o tee . Ich bin mir jedoch nicht sicher, warum ein Teil der Ausgabe immer noch auf dem Bildschirm ausgegeben und nicht in die Datei geschrieben wird.

Gibt es eine Möglichkeit, die gesamte Ausgabe in eine Datei umzuleiten?

1400voto

Op De Cirkel Punkte 27523

Dieser Teil wird in stderr geschrieben, verwenden Sie 2> um sie umzuleiten. Zum Beispiel:

foo > stdout.txt 2> stderr.txt

oder wenn Sie wollen, in derselben Datei:

foo > allout.txt 2>&1

Hinweis: Dies funktioniert in (ba)sh, überprüfen Sie Ihre Shell auf die richtige Syntax

182voto

Bryan Agee Punkte 4646

Alle POSIX-Betriebssysteme haben 3 Ströme : stdin, stdout und stderr. stdin ist die Eingabe, die stdout oder stderr annehmen kann. stdout ist die primäre Ausgabe, die mit > , >> o | . stderr ist die Fehlerausgabe, die separat behandelt wird, damit keine Ausnahmen an einen Befehl weitergegeben oder in eine Datei geschrieben werden, die dadurch beschädigt werden könnte; normalerweise wird dies an eine Art Protokoll gesendet oder direkt ausgegeben, auch wenn stdout umgeleitet wird. Um beides an dieselbe Stelle umzuleiten, verwenden Sie:

$command &> /some/file

エディテージ : Dank an Zack für den Hinweis, dass die obige Lösung nicht portabel ist - verwenden Sie stattdessen:

$command > file 2>&1 

Wenn Sie den Fehler beheben wollen, tun Sie das:

$command 2> /dev/null

123voto

Sagar Jain Punkte 6801

Um die Ausgabe auf der Konsole UND in einer Datei zu erhalten file.txt zum Beispiel.

make 2>&1 | tee file.txt

Anmerkung: & (in 2>&1 ) legt fest, dass 1 ist kein Dateiname, sondern ein Dateideskriptor.

61voto

Indrajeet Gour Punkte 3262

Verwenden Sie diese - "require command here" > log_file_name 2>&1

Ausführliche Beschreibung des Umleitungsoperators in Unix/Linux.

Der Operator > leitet die Ausgabe normalerweise in eine Datei um, kann aber auch auf ein Gerät umgeleitet werden. Sie können >> auch zum Anhängen verwenden.

Wenn Sie keine Nummer angeben, wird der Standardausgabestrom angenommen, aber Sie können auch Fehler umleiten

> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file

/dev/null ist das Null-Gerät, das jede beliebige Eingabe entgegennimmt und wegwirft. Es kann verwendet werden, um jegliche Ausgabe zu unterdrücken.

51voto

qräbnö Punkte 2169

Dank an osexp2003 und j.a.


Anstatt zu setzen:

&>> your_file.log

hinter einer Linie in:

crontab -e

Ich benutze:

#!/bin/bash
exec &>> your_file.log
…

zu Beginn einer BASH Drehbuch.

Vorteil: Sie haben die Protokolldefinitionen innerhalb Ihres Skripts. Gut für Git usw.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X