GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So leiten Sie stderr in Bash auf stdout um

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.


Linux
  1. So leiten Sie die Ausgabe in eine Datei und Stdout in Linux um

  2. Wie leite ich nur Stderr um?

  3. Wie überprüfe ich Syslog in Bash unter Linux?

  4. Leiten Sie die gesamte Ausgabe in eine Datei in Bash um

  5. Wie überprüfe ich, ob eine Datei in Bash leer ist?

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So lesen Sie Dateien Zeile für Zeile in Bash

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So lesen Sie eine Datei Zeile für Zeile in Bash

So verwenden Sie Bash-Dateitestoperatoren in Linux

Wie man einen Abschnitt einer Datei in der Bash-Shell grep