Ich möchte eine kurze Erklärung der folgenden Befehlszeile:
grep -i 'abc' content 2>/dev/null
command-line
bash
redirect
stdout
Naiv
quelle
quelle
> /dev/null 2>&1
und&> /dev/null
2>&1
eine ältere Syntax gibt, also&>
hätte das vor Jahren nicht funktioniert, aber beide sind gleichwertig.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:
Führen Sie
command
im Hintergrund, verwerfenstdout
undstderr
Führen Sie
command
stdout 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
quelle
> /dev/null 2>&1
statt zu verwenden&> /dev/null
?&>
ist neu in Bash 4, der erstere ist nur der traditionelle Weg, ich bin nur so daran gewöhnt (leicht zu merken).&> /dev/null
möglicherweise nicht in einigen Muscheln aber> / dev / null 2> & 1 wird in allen kompatibelen Schalen POSIX arbeiten.fn>target
, wofn
eine dateinummer ist (0-2 normalerweise definieren einige programme mehr nummern) undtarget
ist 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"./dev/null
wird 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 (dh2
) in das Schwarze Loch (dh/dev/null
) umleiten.Ihr Befehl lautet:
Versuchen Sie nicht, mit einem weiteren Schrägstrich wie diesem zu enden
2>/dev/null/
(es ist kein Verzeichnis).quelle
Der Inhalt von grep -i 'abc' generiert eine Ausgabe, die auf Ihrer Konsole angezeigt wird, einschließlich etwaiger Fehler.
Durch die Angabe
2>/dev/null
werden 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.quelle