Bash se o comando não ' terminar no tempo X?

Estou tentando executar algo como:

sudo dhclient $wifi || otherFunction 

O problema é quando dhclient falha, ele apenas trava em vez de gerar um erro.

Como posso reescrever o texto acima para que dhclient seja morto e otherFunction é chamado se dhclient não terminar em 60 segundos?

Resposta

Sua tag revela tudo:

sudo timeout 60 dhclient $wifi || otherFunction 

Um exemplo:

sudo timeout 3 sleep 5 || echo finished early 

Isso usa o utilitário de tempo limite fornecido pelo pacote GNU coreutils no Linux.

Comentários

  • não ' não funciona no MacOS, infelizmente
  • timeout para MacOS: stackoverflow.com/a/21118126/451480
  • Se você deseja verificar especificamente timeout matando o e comando (ao contrário da falha do comando por outros motivos), verifique o status de saída 124.

Resposta

Use timeout .

timeout 2 sleep 1 echo $? 0 timeout 1 sleep 2 echo $? 124 

Comentários

  • não ' não funciona no MacOS, infelizmente

Resposta

Use o timeout compactado como gtimeout com o coreutils porta em brew :

brew install coreutils gtimeout --help 

Isso “funcionará com /usr/local/bin em seu PATH. Se você deseja usar timeout como originalmente nomeado, adicione /usr/local/opt/coreutils/libexec/gnubin ao seu PATH.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *