
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/null
assim e o que isso 2>&1
significa?
Sempre parece funcionar, mas gostaria de saber o que está fazendo.
Responder1
>/dev/null
redireciona a saída padrão do comando para o dispositivo nulo, que é um dispositivo especial que descarta as informações gravadas nele
2>&1
redireciona 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>&1
porque é 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