Betrachten wir ein weiteres Beispiel. Nehmen wir die folgenden zwei Befehle: Der erste (ls
) ist ein gültiger Befehl, während der zweite (ls -0
) ein ungültiger Befehl ist, da er eine unzulässige Option -0
enthält.
Dies ist ein gültiger Befehl:
$ ls
Applications Documents Library Music Public$ echo $?
0
Schauen wir uns nun den ungültigen Befehl an:
$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1
Das Problem mit dem zweiten Skript ist, dass es alle Fehlermeldungen in STDERR
anzeigt. Für unsere Skripte wollen wir jedoch Fehlermeldungen unterdrücken. Zum Glück gibt es einen Hack, mit dem wir genau das erreichen können, was wir wollen.
Wir versuchen es noch einmal mit > /dev/null 2>&1
:
$ ls -0 > /dev/null 2>&1
$ echo $?
1
Diesmal haben wir keine Fehlermeldungen gesehen. Um dies aufzuschlüsseln, unterdrücken wir die Fehlerausgabe (stderr
) des ls -0
-Befehls, leiten sie auf die Standardausgabe (stdout
) um und schreiben sie nach /dev/null
, wodurch sie sofort verworfen wird. Das Symbol >&
ist ein Operator, der die Ausgabe des ersten Dateideskriptors (2) kopiert und auf die Ausgabe des zweiten Dateideskriptors (1) umleitet.
Nun wollen wir sehen, was die Zahlen in 2>&1
bedeuten, indem wir uns diese Tabelle der Dateideskriptoren ansehen.
Wir können dies überprüfen, indem wir anstelle von /dev/null
in eine reguläre Datei ausgeben.
$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls