Wenn Sie die Ausgabe eines Befehls in eine Datei umleiten oder an einen anderen Befehl weiterleiten, stellen Sie möglicherweise fest, dass die Fehlermeldungen auf dem Bildschirm ausgegeben werden.
In Bash und anderen Linux-Shells verwendet ein Programm, wenn es ausgeführt wird, drei Standard-I/O-Streams. Jeder Stream wird durch einen numerischen Dateideskriptor dargestellt:
0
-stdin
, der Standardeingabestream.1
-stdout
, der Standardausgabestream.2
-stderr
, der Standardfehlerstrom.
Ein Dateideskriptor ist nur eine Zahl, die eine geöffnete Datei darstellt.
Der Eingabestrom stellt dem Programm Informationen zur Verfügung, im Allgemeinen durch Eintippen auf der Tastatur.
Die Programmausgabe geht in den Standardeingabestrom und die Fehlermeldungen in den Standardfehlerstrom. Standardmäßig werden sowohl Eingabe- als auch Fehlerströme auf dem Bildschirm ausgegeben.
Umleitungsausgabe #
Umleitung ist eine Möglichkeit, die Ausgabe eines Programms zu erfassen und als Eingabe an ein anderes Programm oder eine andere Datei zu senden.
Streams können mit n>
umgeleitet werden Operator, wobei n
ist die Dateideskriptornummer.
Wenn n
weggelassen wird, wird standardmäßig 1
verwendet , der Standardausgabestream. Beispielsweise sind die folgenden beiden Befehle identisch; beide leiten die Befehlsausgabe um (stdout
) in die Datei.
command > file
command 1> file
Um den Standardfehler umzuleiten (stderr
) verwenden Sie den 2>
Betreiber:
command 2> file
Sie können sowohl stderr
schreiben und stdout
in zwei separate Dateien:
command 2> error.txt 1> output.txt
Um die Anzeige der Fehlermeldungen auf dem Bildschirm zu unterdrücken, leiten Sie stderr
um nach /dev/null
:
command 2> /dev/null
Umleitung von stderr
zu stdout
#
Beim Speichern der Programmausgabe in eine Datei ist es üblich, stderr
umzuleiten zu stdout
damit Sie alles in einer einzigen Datei haben können.
Um stderr
umzuleiten zu stdout
und Fehlermeldungen an dieselbe Datei wie die Standardausgabe senden zu lassen, verwenden Sie Folgendes:
command > file 2>&1
> file
die stdout
umleiten in file
, und 2>&1
den stderr
umleiten an die aktuelle Position von stdout
.
Die Reihenfolge der Umleitung ist wichtig. Das folgende Beispiel leitet beispielsweise nur stdout
um in file
. Dies geschieht, weil der stderr
wird nach stdout
umgeleitet vor stdout
wurde zu file
umgeleitet .
command 2>&1 > file
Eine andere Möglichkeit, stderr
umzuleiten zu stdout
ist die Verwendung von &>
bauen. In Bash &>
hat dieselbe Bedeutung wie 2>&1
:
command &> file
Schlussfolgerung #
Das Verständnis des Konzepts von Umleitungen und Dateideskriptoren ist sehr wichtig, wenn Sie auf der Befehlszeile arbeiten.
Um stderr
umzuleiten und stdout
, verwenden Sie 2>&1
oder &>
Konstrukte.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.