Bash se il comando non ' finisce in X tempo?

Sto cercando di eseguire qualcosa del tipo:

sudo dhclient $wifi || otherFunction 

Il problema è quando dhclient non riesce si blocca invece di generare un errore.

Come posso riscrivere quanto sopra così dhclient è ucciso e otherFunction viene chiamato se dhclient non finisce entro 60 secondi?

Risposta

Il tuo tag dà tutto:

sudo timeout 60 dhclient $wifi || otherFunction 

Un esempio:

sudo timeout 3 sleep 5 || echo finished early 

che utilizza lutilità timeout fornito dal pacchetto GNU coreutils su Linux.

Commenti

  • ' non funziona su MacOS sfortunatamente
  • timeout per MacOS: stackoverflow.com/a/21118126/451480
  • Se desideri controllare specificamente timeout uccisione e comando (al contrario del comando che non riesce per altri motivi), controlla lo stato di uscita 124.

Risposta

Utilizza timeout .

timeout 2 sleep 1 echo $? 0 timeout 1 sleep 2 echo $? 124 

Commenti

  • ' non funziona su MacOS purtroppo

Risposta

Utilizza timeout impacchettato come gtimeout con coreutils porta in brew :

brew install coreutils gtimeout --help 

Funzionerà con /usr/local/bin nel tuo PATH. Se desideri utilizzare timeout come originariamente chiamato, aggiungi /usr/local/opt/coreutils/libexec/gnubin al tuo PATH.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *