Bash si el comando no termina en X tiempo?


13

Estoy tratando de ejecutar algo como:

sudo dhclient $wifi || otherFunction

El problema es cuando dhclientfalla, simplemente se cuelga en lugar de arrojar un error.

¿Cómo puedo volver a escribir lo anterior para que dhclientse elimine y otherFunctionse llame si dhclientno termina en 60 segundos?

Respuestas:


13

Su etiqueta de lo delata 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 proporcionada por el paquete GNU coreutils en Linux.


2
lamentablemente no funciona en MacOS
— Alexander Mills


Si desea verificar específicamente la timeouteliminación del comando (en lugar de que el comando falle por otras razones), verifique el estado de salida 124.
— muru


2

Use el timeoutempaquetado como gtimeoutcon el coreutilspuerto en brew:

brew install coreutils
gtimeout --help

Eso funcionará /usr/local/binen tu PATH. Si desea utilizar el timeoutnombre original, agregue /usr/local/opt/coreutils/libexec/gnubina su PATH.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.