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