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
.
timeout
para MacOS: stackoverflow.com/a/21118126/451480timeout
matar a e comando (a diferencia del comando que falla por otras razones), verifique el estado de salida 124.