Was bedeutet 2> / dev / null?


Antworten:


347

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

> fileLeitet stdout zur Datei
1> fileum Leitet stdout zur Datei
2> fileum Leitet stderr zur Datei
&> fileum Leitet stdout und stderr zur Datei um

/dev/nullist das Null-Gerät, das beliebige Eingaben annimmt und wegwirft. Hiermit kann jede Ausgabe unterdrückt werden.


6
Gibt es einen Unterschied zwischen > /dev/null 2>&1und&> /dev/null
Alexander Mills

13
In der heutigen Praxis glaube ich nicht, dass es 2>&1eine ältere Syntax gibt, also &>hätte das vor Jahren nicht funktioniert, aber beide sind gleichwertig.
Warren Hill

28

Kurz gesagt, es leitet stderr(fd 2) zum Schwarzen Loch um (verwirft die Ausgabe des Befehls).

Einige häufigere Anwendungsfälle für die Umleitung:

command > /dev/null 2>&1 &

Führen Sie commandim Hintergrund, verwerfen stdoutundstderr

command >> /path/to/log 2>&1 &

Führen Sie commandstdout und stderr aus und hängen Sie sie an eine Protokolldatei an.

In Bash 4+ ist eine kürzere (aber weniger lesbare) Form funktionsfähig

command &>> /path/to/log

3
Gibt es einen guten Grund, > /dev/null 2>&1statt zu verwenden &> /dev/null?
Craig McQueen

7
@CraigMcQueen &>ist neu in Bash 4, der erstere ist nur der traditionelle Weg, ich bin nur so daran gewöhnt (leicht zu merken).
Terry Wang

@CraigMcQueen nach einem Kommentar zu dieser Antwort , &> /dev/nullmöglicherweise nicht in einigen Muscheln aber> / dev / null 2> & 1 wird in allen kompatibelen Schalen POSIX arbeiten.
Stack

3
Warum ist es 2> & 1 und nicht 2 & 1>?
marienbad

1
@marienbad das ist eigentlich eine frage die es sich zu posten lohnt :-) Die syntax ist fn>target, wo fneine dateinummer ist (0-2 normalerweise definieren einige programme mehr nummern) und targetist normalerweise ein dateiname aber hier ist es eine andere dateinummer - mit &dem vorangestellt ist die Syntax für "Ich möchte eine Dateinummer anstelle eines Dateinamens".
Toolforger

9

/dev/nullwird in Linux / Unix als schwarzes Loch behandelt, daher können Sie alles in dieses Feld einfügen, aber Sie können es nicht wiederherstellen /dev/null.

Ferner 2>bedeutet dies, dass Sie >das Stderr (dh 2) in das Schwarze Loch (dh /dev/null) umleiten.

Ihr Befehl lautet:

grep -i 'abc' content 2>/dev/null 

Versuchen Sie nicht, mit einem weiteren Schrägstrich wie diesem zu enden 2>/dev/null/(es ist kein Verzeichnis).


2

Der Inhalt von grep -i 'abc' generiert eine Ausgabe, die auf Ihrer Konsole angezeigt wird, einschließlich etwaiger Fehler.

Durch die Angabe 2>/dev/nullwerden die Fehler herausgefiltert, sodass sie nicht auf Ihrer Konsole ausgegeben werden.

Genauer gesagt: 2 steht für den Fehlerdeskriptor, in den Fehler geschrieben werden. Standardmäßig werden sie auf der Konsole ausgedruckt.

\> Leitet in diesem Fall die Ausgabe an den angegebenen Ort um /dev/null

/dev/null ist das Standard-Linux-Gerät, auf dem Sie Ausgaben senden, die ignoriert werden sollen.


Kurz und thematisch. Gute Antwort.
Sergiy Kolodyazhnyy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.