Executa um comando após cada linha de saída do comando ping

2

Estou tentando criar um comando de uma linha para monitorar quando minha conectividade com a Internet cair.

Eu gostaria que, se eu executasse ping www.google.com indefinidamente (um ping por segundo), se a palavra "timeout" existisse em uma linha de saída, outro comando fosse executado, mas o comando ping continuaria a ser executado indefinidamente .

Eu estou rodando isso no OS X, então o outro comando é say fail , então eu posso ouvir audivelmente que há um problema se eu não estiver olhando para a janela do terminal.

Se não pode ser um comando de uma linha, então um script bash estaria bem.

Eu tentei isso:

ping www.google.com | grep timeout ; say fail

mas que apenas executa o comando say após o usuário finalizar manualmente o comando ping .

Então eu tentei isso:

if ping www.google.com | grep timeout ; then say fail ; fi

Mas isso nunca executa o comando say .

    
por mike 18.01.2016 / 17:32

1 resposta

3

Seu problema vem do comando ping que nunca sai.

Você deve fazer um loop que chame ping para um teste -c 1 :

while [ true ] ; do if ping -c 1 www.google.com | grep timeout ; then say fail ; fi ; sleep 1 ; done

editar

  • Eu escrevi um loop bash while, talvez você devesse adaptá-lo ao seu programa shell (faz muito tempo que eu uso o mac os X),
  • Eu adicionei uma pausa (um segundo) para evitar que o loop consuma muita CPU ...
por 18.01.2016 / 17:46