it-swarm.com.de

Leitet alle Ausgaben in eine Datei um

Ich weiß, dass ich unter Linux entweder den > oder tee verwenden kann, um die Ausgabe vom Bildschirm in eine Datei umzuleiten. 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, alle Ausgaben in eine Datei umzuleiten?

698
Rayne

Dieser Teil ist in stderr geschrieben. Verwenden Sie 2>, um ihn umzuleiten. Zum Beispiel:

foo > stdout.txt 2> stderr.txt

oder wenn Sie in der gleichen Datei wollen:

foo > allout.txt 2>&1

Hinweis: Dies funktioniert in (ba) sh. Überprüfen Sie Ihre Shell auf korrekte Syntax

1111
Op De Cirkel

Alle POSIX-Betriebssysteme haben 3 Streams : stdin, stdout und stderr. stdin ist die Eingabe, die stdout oder stderr akzeptieren kann. stdout ist die primäre Ausgabe, die mit >, >> oder | umgeleitet wird. stderr ist die Fehlerausgabe, die separat behandelt wird, damit keine Ausnahmen an einen Befehl übergeben oder in eine Datei geschrieben werden, die möglicherweise beschädigt wird. Normalerweise wird dies an ein Protokoll gesendet oder direkt ausgegeben, selbst wenn die Standardausgabe umgeleitet wird. Um beide an denselben Ort umzuleiten, verwenden Sie:

command &> /some/file

EDIT: danke an zack für den hinweis, dass die obige lösung nicht portabel ist - verwende stattdessen:

*command* > file 2>&1 

Wenn Sie den Fehler beseitigen möchten, gehen Sie wie folgt vor:

*command* 2> /dev/null
140
Bryan Agee

So erhalten Sie die Ausgabe auf der Konsole UND in einer Datei file.txt zum Beispiel.

make 2>&1 | tee file.txt

Hinweis: & (in 2>&1) gibt an, dass 1 kein Dateiname, sondern ein Dateideskriptor ist.

80
Sagar Jain

Benutze diesen - "require command here" > log_file_name 2>&1

Detaillierte Beschreibung des Umleitungsoperators in Unix/Linux.

Der Operator> leitet die Ausgabe normalerweise in eine Datei um, es kann sich jedoch auch um ein Gerät handeln. Sie können auch >> zum Anhängen verwenden.

Wenn Sie keine Zahl angeben, wird der Standardausgabestream angenommen, Sie können jedoch 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 beliebige Eingaben entgegennimmt und wegwirft. Hiermit kann jede Ausgabe unterdrückt werden.

43
Indrajeet Gour

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
…

am Anfang eines BASH-Skripts.

Vorteil: Sie haben die Protokolldefinitionen in Ihrem Skript. Gut für Git etc.

29
qräbnö

Sie können den Befehl exec verwenden, um alle stdout/stderr-Ausgaben von Befehlen später umzuleiten.

beispielskript:

exec 2> your_file2 > your_file1
your other commands.....
15
osexp2003

Es könnte der Standardfehler sein. Sie können es weiterleiten:

... > out.txt 2>&1
15
Petar Ivanov

Befehl:

foo >> output.txt 2>&1

hängt an die Datei output.txt an, ohne den Inhalt zu ersetzen.

14
ellockie

Verwenden Sie >>, um Folgendes anzufügen:

command >> file

6
khushi muhammad