Bash se il comando non termina in X time?


13

Sto cercando di eseguire qualcosa del tipo:

sudo dhclient $wifi || otherFunction

Il problema è che quando dhclientfallisce si blocca e non genera un errore.

Come posso riscrivere quanto sopra in modo che dhclientvenga ucciso e otherFunctionvenga chiamato se dhclientnon termina in 60 secondi?

Risposte:


13

Il tag di dà tutto:

sudo timeout 60 dhclient $wifi || otherFunction

Un esempio:

sudo timeout 3 sleep 5 || echo finished early

Questo utilizza l' utilità di timeout fornita dal pacchetto GNU coreutils su Linux.


2
purtroppo non funziona su MacOS
Alexander Mills,


Se vuoi controllare specificamente per timeoutaver ucciso il comando (al contrario del comando che fallisce per altri motivi), controlla lo stato di uscita 124.
muru


2

Usa il timeoutpacchetto come gtimeoutcon la coreutilsporta in brew:

brew install coreutils
gtimeout --help

Funzionerà con /usr/local/binnel tuo PATH. Se si desidera utilizzare timeoutcome indicato originariamente, aggiungere /usr/local/opt/coreutils/libexec/gnubina PATH.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.