¿Bash si el comando no ' t termina en X tiempo?

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 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

  • no ' no funciona en MacOS desafortunadamente
  • timeout para MacOS: stackoverflow.com/a/21118126/451480
  • Si desea verificar específicamente timeout matar a e comando (a diferencia del comando que falla por otras razones), verifique el estado de salida 124.

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *