Wenn du die Ausgabe eines Befehls in eine Datei oder an einen anderen Befehl weitergeben möchtest, kann es sein, dass Fehlermeldungen trotzdem auf dem Bildschirm erscheinen.
In der Bash und anderen Linux-Shells nutzt ein Programm beim Ausführen drei standardmäßige Ein-/Ausgabe-Ströme. Diese Ströme werden durch numerische Dateideskriptoren dargestellt:
0
–stdin
, der Standard-Eingabestrom.1
–stdout
, der Standard-Ausgabestrom.2
–stderr
, der Standard-Fehlerstrom.
Ein Dateideskriptor ist einfach eine Zahl, die eine geöffnete Datei repräsentiert.
Der Eingabestrom liefert dem Programm Informationen, normalerweise durch Tastatureingaben.
Die Programmausgabe gelangt in den Standardausgabestrom, während Fehlermeldungen im Standardfehlerstrom landen. Standardmäßig werden sowohl die Ausgabe- als auch die Fehlerströme auf dem Bildschirm angezeigt.
Ausgabeumleitung
Die Umleitung ermöglicht es, die Ausgabe eines Programms abzufangen und an ein anderes Programm oder eine Datei weiterzugeben.
Ströme können mit dem Operator n
umgeleitet werden, wobei n
die Nummer des Dateideskriptors darstellt.
Wird n
weggelassen, wird standardmäßig der Dateideskriptor 1
(Standardausgabe) verwendet. Die beiden folgenden Befehle sind beispielsweise identisch und leiten die Ausgabe (stdout
) in eine Datei:
Befehl > Datei
Befehl 1 > Datei
Um den Standardfehler (stderr
) umzuleiten, nutze den Operator 2
:
Befehl 2 > Datei
Du kannst sowohl stderr
als auch stdout
in zwei unterschiedliche Dateien schreiben lassen:
Befehl 2> Fehler.txt 1> Ausgabe.txt
Um Fehlermeldungen auf dem Bildschirm zu unterdrücken, leite stderr
nach /dev/null
um:
Befehl 2> /dev/null
Umleitung von stderr
zu stdout
Beim Speichern der Programmausgabe in einer Datei ist es üblich, stderr
auf stdout
umzuleiten, um alles in einer Datei zu erfassen.
Um stderr
auf stdout
umzuleiten und Fehlermeldungen in dieselbe Datei wie die Standardausgabe zu übertragen, verwende folgende Schreibweise:
Befehl > Datei 2>&1
Hierbei leitet >Datei
die stdout
in die Datei um, und 2>&1
leitet den stderr
-Strom an den aktuellen Ort von stdout
.
Die Reihenfolge der Umleitung ist entscheidend. Im folgenden Beispiel wird beispielsweise nur stdout
in die Datei umgeleitet. Das liegt daran, dass stderr
auf stdout
umgeleitet wird, bevor stdout
zur Datei umgeleitet wurde:
Befehl 2>&1 > Datei
Eine alternative Methode, um stderr
auf stdout
umzuleiten, ist die Verwendung der >&
-Struktur. In der Bash entspricht >&
der Bedeutung von 2>&1
:
Befehl >& Datei
Fazit
Das Verständnis des Konzepts der Umleitungen und Dateideskriptoren ist äußerst wichtig, wenn man mit der Kommandozeile arbeitet.
Verwende die 2>&1
oder >&
-Strukturen, um sowohl stderr
als auch stdout
umzuleiten.
Wenn du Fragen oder Anmerkungen hast, kannst du gerne einen Kommentar hinterlassen.