>> /dev/null 2>&1
Teilen wir die Aussage in Teile auf:
Teil 1: >>
Ausgabeumleitung
Dies wird verwendet, um die Programmausgabe umzuleiten und die Ausgabe am Ende der Datei anzuhängen. Mehr...
Teil 2: /dev/null
Spezialdatei
Dies ist eine spezielle Pseudo-Gerätedatei .
Der Befehl ls -l /dev/null
gibt Ihnen Details zu dieser Datei:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Hast du beobachtet crw
? Dies bedeutet, dass es sich um eine Pseudo-Gerätedatei handelt , die vom Typ einer speziellen Zeichendatei ist und seriellen Zugriff bietet.
/dev/null
akzeptiert und verwirft alle Eingaben; erzeugt keine Ausgabe (gibt beim Lesen immer eine Dateiende-Anzeige zurück). Referenz: Wikipedia
Teil 3: 2>&1
Dateideskriptor
Wenn Sie ein Programm ausführen, öffnet das Betriebssystem immer drei Dateien: Standardeingabe, Standardausgabe und Standardfehler. Wie wir wissen, gibt das Betriebssystem (vom Kernel ) beim Öffnen einer Datei eine nicht negative Ganzzahl zurück, die als Dateideskriptor bezeichnet wird . Der Dateideskriptor für diese Dateien ist 0, 1 bzw. 2.
Also 2>&1
einfach Standardfehler zur Standardausgabe umleiten.
&
bedeutet, was auch immer folgt, ist ein Dateideskriptor, kein Dateiname.
Kurz gesagt, mit diesem Befehl weisen Sie Ihr Programm an, während der Ausführung nicht zu schreien.
Was ist die Bedeutung der Verwendung 2>&1
?
Wenn Sie keine Ausgabe erzeugen möchten, auch wenn im Terminal ein Fehler auftritt. Betrachten wir zur besseren Erläuterung das folgende Beispiel:
$ ls -l > /dev/null
Für den obigen Befehl wurde keine Ausgabe im Terminal gedruckt, aber was ist, wenn dieser Befehl einen Fehler erzeugt:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Obwohl ich die Ausgabe auf umlenke /dev/null
, wird sie im Terminal gedruckt. Dies liegt daran, dass wir die Fehlerausgabe nicht umleiten. /dev/null
Um auch die Fehlerausgabe umzuleiten, müssen Sie Folgendes hinzufügen 2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
.