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.