Quando você executa:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Você está basicamente redirecionando apenas a saída do fluxo 1 (ou seja stdout
) para /dev/null
.
Isso é bom quando você deseja redirecionar a saída produzida pela execução normal de um programa. No entanto, caso você também deseje redirecionar a saída causada por todos os erros, avisos ou falhas, você também deve redirecionar o stderr
fluxo ou Erro Padrão para /dev/null
.
Uma maneira de fazer isso é preceder o número do fluxo que você deseja redirecionar para o operador de redirecionamento, >
assim:Command 2> /dev/null
Portanto, seu comando seria semelhante a:
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 informa 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
Tenha cuidado com os operadores de redirecionamento, a ordem deles é muito importante. Se você redirecionar na ordem errada, você terá resultados inesperados.
Outra maneira pela qual você pode obter um silêncio completo é redirecionando todos os fluxos de saída para /dev/null
usar este atalho: &>/dev/null
(ou redirecione para um arquivo de log com &>/path/to/file.log
).
Portanto, escreva seu comando como:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
sim. Obrigado a todos pela ajuda instantânea!Be careful with the redirection operators, their order matters a lot.
, mas você não incluiu um exemplo de uso real2>&1
Você precisa redirecionar a saída padrão (
>
ou1>
) e o erro padrão (2>
):ou, redirecione um para o outro:
fonte
Exemplos
Acelerando o ping
Dependendo da sua
ping
implementação, você pode estar limitado a uma única contagem-c 1
. Algumas implementações permitem que você fique abaixo disso, mas você basicamente precisa aguardar o tempo limite das pesquisas ruins. Então, em vez de usar,ping
você pode usarfing
.lentidão do ping falhando
dedo é muito mais rápido para falhar
fonte
time
comando do que calcular manualmente a diferença de tempo comdate
:time { fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; }
date
. É mais fácil, IMO, para outra pessoa ler a saída gerada.