Quando você executa:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Você essencialmente redireciona apenas a saída do fluxo 1 (ou seja, stdout
) para /dev/null
.
Isto é bom quando você quer redirecionar a saída que é produzida pela execução normal de um programa. No entanto, caso deseje também redirecionar a saída causada por todos os erros, avisos ou falhas, você também deve redirecionar o fluxo stderr
ou Erro padrão para /dev/null
.
Uma maneira de fazer isso é prefixar o número do fluxo que você deseja redirecionar para o operador de redirecionamento, >
assim: Command 2> /dev/null
Assim, seu comando ficaria assim:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Mas, observe que já redirecionamos um fluxo para /dev/null
. Por que não simplesmente pegar carona no mesmo redirecionamento? O Bash nos permite fazer isso especificando o número do fluxo para o qual redirecionar. 2>&1
.
Observe o caractere &
após o operador de redirecionamento. Isso diz ao shell que o que aparece a seguir não é um nome de arquivo, mas um identificador para o fluxo de saída.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Cuidado com os operadores de redirecionamento, o pedido deles é muito importante. Se você fosse redirecionar na ordem errada, você acabaria com resultados inesperados.
Outra maneira de atingir o silêncio completo é redirecionar os fluxos de saída all para /dev/null
usando este atalho: &>/dev/null
(ou redirecionar para um arquivo de log com &>/path/to/file.log
). / p>
Portanto, escreva seu comando como:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline