Bash if command does not ' t finish in X time?

Jeg prøver å kjøre noe som:

sudo dhclient $wifi || otherFunction 

Problemet er når dhclient mislykkes, det henger bare i stedet for å kaste en feil.

Hvordan kan jeg skrive om det ovenfor slik at dhclient drept og otherFunction blir kalt hvis dhclient ikke fullfører på 60 sekunder?

Svar

-koden gir alt:

sudo timeout 60 dhclient $wifi || otherFunction 

Et eksempel:

sudo timeout 3 sleep 5 || echo finished early 

Dette bruker timeout-verktøy levert av GNU coreutils-pakken på Linux.

Kommentarer

  • fungerer ikke ' t fungerer dessverre på MacOS
  • timeout for MacOS: stackoverflow.com/a/21118126/451480
  • Hvis du vil sjekke spesielt for timeout drepe e-kommandoen (i motsetning til at kommandoen mislykkes av andre grunner), sjekk for utgangsstatus 124.

Svar

Bruk timeout .

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

Kommentarer

  • fungerer ikke ' t fungerer på MacOS dessverre

Svar

Bruk timeout pakket som gtimeout med coreutils port i brew :

brew install coreutils gtimeout --help 

At «jeg vil jobbe med /usr/local/bin i PATH. Hvis du vil bruke timeout som opprinnelig navngitt, legg til /usr/local/opt/coreutils/libexec/gnubin til PATH.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *