Să ne uităm la un alt exemplu. Având în vedere următoarele două comenzi: prima (ls
) este o comandă validă, în timp ce a doua (ls -0
) este o comandă invalidă deoarece conține o opțiune ilegală -0
.
Aceasta este o comandă validă:
$ ls
Applications Documents Library Music Public$ echo $?
0
Acum să ne uităm la comanda invalidă:
$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1
Problema cu cel de-al doilea script este că afișează orice mesaj de eroare în STDERR
. Cu toate acestea, pentru scripturile noastre, dorim să suprimăm mesajele de eroare. Din fericire, există un hack pentru a face exact ceea ce ne dorim.
Să încercăm din nou cu > /dev/null 2>&1
:
$ ls -0 > /dev/null 2>&1
$ echo $?
1
Observați de data aceasta, că nu am văzut niciun mesaj de eroare. Pentru a descompune acest lucru, suprimăm ieșirea de eroare (stderr
) a comenzii ls -0
, o redirecționăm către ieșirea standard (stdout
), scriind-o în /dev/null
și astfel o aruncăm imediat. Simbolul >&
este un operator care copiază ieșirea primului descriptor de fișier (2) și o redirecționează către ieșirea celui de-al doilea descriptor de fișier (1).
Acum să vedem ce reprezintă numerele din 2>&1
uitându-ne la acest grafic al descriptorilor de fișiere.
Potem verifica acest lucru prin ieșirea către un fișier obișnuit în loc de /dev/null
.
$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls
.