Estoy tratando de ejecutar algo como:
sudo dhclient $wifi || otherFunction
El problema es cuando dhclient falla, simplemente se cuelga en lugar de arrojar un error.
¿Cómo puedo reescribir lo anterior para que dhclient sea muerto y otherFunction se llama si dhclient no termina en 60 segundos?
Respuesta
Su etiqueta timeout lo revela todo:
sudo timeout 60 dhclient $wifi || otherFunction
Un ejemplo:
sudo timeout 3 sleep 5 || echo finished early
Esto usa la utilidad de tiempo de espera proporcionado por el paquete GNU coreutils en Linux.
Comentarios
Responder
Utilice timeout .
timeout 2 sleep 1 echo $? 0 timeout 1 sleep 2 echo $? 124
Comentarios
- no ' no funciona en MacOS desafortunadamente
Respuesta
Utilice el timeout empaquetado como gtimeout con el coreutils puerto en brew :
brew install coreutils gtimeout --help
Eso «funcionará con /usr/local/bin en su PATH. Si desea utilizar timeout como se nombró originalmente, agregue /usr/local/opt/coreutils/libexec/gnubin a su PATH.
timeoutpara MacOS: stackoverflow.com/a/21118126/451480timeoutmatar a e comando (a diferencia del comando que falla por otras razones), verifique el estado de salida 124.