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 tempo limite 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
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
.
timeout
para MacOS: stackoverflow.com/a/21118126/451480timeout
matando o e comando (ao contrário da falha do comando por outros motivos), verifique o status de saída 124.