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.