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.