O que a saída para /dev/null realiza em scripts bash?

O que a saída para /dev/null realiza em scripts bash?

Muitas vezes me deparo com pequenos scripts bash que usam esse tipo de sintaxe em instruções if:

some command > /dev/null 2>&1

Qual é o propósito de produzir algo /dev/nullassim e o que isso 2>&1significa?

Sempre parece funcionar, mas gostaria de saber o que está fazendo.

Responder1

>/dev/nullredireciona a saída padrão do comando para o dispositivo nulo, que é um dispositivo especial que descarta as informações gravadas nele

2>&1redireciona o fluxo de erro padrão para o fluxo de saída padrão (stderr = 2, stdout = 1). Observe que isso pega o fluxo de erro padrão e o aponta para o mesmo local da saída padrão naquele momento. Este é o motivo do pedido >/some/where 2>&1porque é necessário primeiro apontar o stdout para algum lugar eentãoaponte stderr para o mesmo local se quiser combinar os dois fluxos no final.

Na prática, evita que qualquer saída do comando (stdout e stderr) seja exibida. É usado quando você não se importa com a saída do comando.

Responder2

STDIN é representado por 0, STDOUT por 1 e STDERR por 2.

/dev/nuloé o balde de bits: o lugar onde você despeja tudo o que não precisa.


Assim, o STDOUT é redirecionado para o bit-bucket (trash) e o STDERR é redirecionado para onde o STDOUT está localizado: o bit-bucket.


Você também pode fazer isso:

>/dev/null 2>/dev/null

informação relacionada