Guardiamo un altro esempio. Dati i seguenti due comandi: il primo (ls) è un comando valido mentre il secondo (ls -0) è un comando non valido perché contiene un’opzione illegale -0.

Questo è un comando valido:

$ ls
Applications Documents Library Music Public$ echo $?
0

Ora guardiamo il comando non valido:

$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1

Il problema del secondo script è che visualizza qualsiasi messaggio di errore in STDERR. Tuttavia per i nostri script, vogliamo sopprimere i messaggi di errore. Fortunatamente c’è un trucco per fare esattamente ciò che vogliamo.

Proviamolo di nuovo con > /dev/null 2>&1:

$ ls -0 > /dev/null 2>&1
$ echo $?
1

Nota che questa volta non abbiamo visto alcun messaggio di errore. Per scomporre il tutto, stiamo sopprimendo l’output di errore (stderr) del comando ls -0, reindirizzandolo allo standard output (stdout), scrivendolo su /dev/null e scartandolo immediatamente. Il simbolo >& è un operatore che copia l’output del primo descrittore di file (2) e lo reindirizza all’output del secondo descrittore di file (1).

Ora vediamo cosa rappresentano i numeri in 2>&1 guardando questa tabella dei descrittori di file.

Possiamo verificarlo facendo l’output su un file normale invece che su /dev/null.

$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.