Dividiamo la >> /dev/null 2>&1
dichiarazione in parti:
Parte 1: >>
reindirizzamento dell'output
Questo è usato per reindirizzare l'output del programma e aggiungere l'output alla fine del file. Di Più...
Parte 2: /dev/null
file speciale
Questo è un file speciale di pseudo-dispositivi .
Il comando ls -l /dev/null
ti fornirà i dettagli di questo file:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Hai osservato crw
? Ciò significa che si tratta di un file pseudo-dispositivo di tipo file carattere speciale che fornisce l'accesso seriale.
/dev/null
accetta e scarta tutti gli input; non produce alcun output (restituisce sempre un'indicazione di fine file su una lettura). Riferimento: Wikipedia
Parte 3: 2>&1
descrittore di file
Ogni volta che si esegue un programma, il sistema operativo apre sempre tre file, input standard, output standard ed errore standard come sappiamo ogni volta che si apre un file, il sistema operativo (dal kernel ) restituisce un numero intero non negativo chiamato descrittore di file . Il descrittore di file per questi file è rispettivamente 0, 1 e 2.
Quindi 2>&1
dice semplicemente reindirizzare l'errore standard all'output standard.
&
significa che ciò che segue è un descrittore di file, non un nome di file.
In breve, usando questo comando stai dicendo al tuo programma di non urlare durante l'esecuzione.
Qual è l'importanza dell'utilizzo 2>&1
?
Se non si desidera produrre alcun output, anche in caso di errore prodotto nel terminale. Per spiegare più chiaramente, consideriamo il seguente esempio:
$ ls -l > /dev/null
Per il comando sopra, nessun output è stato stampato nel terminale, ma cosa succede se questo comando produce un errore:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Nonostante stia reindirizzando l'output a /dev/null
, viene stampato nel terminale. È perché non stiamo reindirizzando l'output dell'errore a /dev/null
, quindi per reindirizzare anche l'output dell'errore, è necessario aggiungere 2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
.