1. Startseite
  2. Bash Skript
  3. Umleiten von stderr auf stdout in der Bash

Umleiten von stderr auf stdout in der Bash

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:

  • 0stdin, der Standard-Eingabestrom.
  • 1stdout, der Standard-Ausgabestrom.
  • 2stderr, 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.

War dieser Beitrag hilfreich?

Verwandte Beiträge