Bash se o comando não terminar em X tempo?


12

Estou tentando executar algo como:

sudo dhclient $wifi || otherFunction

O problema é que quando dhclientfalha, ele simplesmente trava em vez de gerar um erro.

Como posso reescrever o que dhclientfoi otherFunctiondito acima para ser morto e ser chamado se dhclientnão terminar em 60 segundos?

Respostas:


12

Sua tag de revela tudo:

sudo timeout 60 dhclient $wifi || otherFunction

Um exemplo:

sudo timeout 3 sleep 5 || echo finished early

Isso usa o utilitário timeout fornecido pelo pacote GNU coreutils no Linux.


2
infelizmente não funciona no MacOS
Alexander Mills


Se você quiser verificar especificamente para timeoutmatar o comando (em oposição ao comando falhar por outros motivos), para verificar o status de saída 124.
Muru


2

Use o timeoutpacote como gtimeoutna coreutilsporta em brew:

brew install coreutils
gtimeout --help

Isso funcionará com o /usr/local/binseu PATH. Se você deseja usar timeoutcomo nomeado originalmente, adicione /usr/local/opt/coreutils/libexec/gnubinao seu PATH.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.