Vamos dividir a >> /dev/null 2>&1
declaração em partes:
Parte 1: >>
redirecionamento de saída
Isso é usado para redirecionar a saída do programa e anexá-la ao final do arquivo. Mais...
Parte 2: /dev/null
arquivo especial
Este é um arquivo especial de pseudo-dispositivos .
O comando ls -l /dev/null
fornecerá detalhes desse arquivo:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Você observou crw
? O que significa que é um arquivo de pseudo-dispositivo que é do tipo de arquivo especial de caractere que fornece acesso serial.
/dev/null
aceita e descarta todas as entradas; não produz saída (sempre retorna uma indicação de fim de arquivo em uma leitura). Referência: Wikipedia
Parte 3: 2>&1
descritor de arquivo
Sempre que você executa um programa, o sistema operacional sempre abre três arquivos, entrada padrão, saída padrão e erro padrão, como sabemos sempre que um arquivo é aberto, o sistema operacional (do kernel ) retorna um número inteiro não negativo chamado descritor de arquivo . O descritor de arquivo para esses arquivos é 0, 1 e 2, respectivamente.
Então, 2>&1
simplesmente diz redirecionar o erro padrão para a saída padrão.
&
significa o que segue é um descritor de arquivo, não um nome de arquivo.
Em resumo, usando este comando, você está dizendo ao seu programa para não gritar durante a execução.
Qual a importância de usar 2>&1
?
Se você não quiser produzir nenhuma saída, mesmo no caso de algum erro produzido no terminal. Para explicar mais claramente, vamos considerar o seguinte exemplo:
$ ls -l > /dev/null
Para o comando acima, nenhuma saída foi impressa no terminal, mas e se este comando produzir um erro:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Apesar de eu estar redirecionando a saída para /dev/null
, ela é impressa no terminal. É porque não estamos redirecionando a saída de erro para /dev/null
, portanto, para redirecionar também a saída de erro, é necessário adicionar 2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
.