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

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.