Bash if commando niet ' t klaar is in X keer?

Ik “probeer iets uit te voeren als:

sudo dhclient $wifi || otherFunction 

Het probleem is wanneer dhclient mislukt, het blijft hangen in plaats van een foutmelding te geven.

Hoe kan ik het bovenstaande herschrijven zodat dhclient is gedood en otherFunction wordt gebeld als dhclient niet “binnen 60 seconden klaar is?

Antwoord

Uw -tag geeft het allemaal weg:

sudo timeout 60 dhclient $wifi || otherFunction 

Een voorbeeld:

sudo timeout 3 sleep 5 || echo finished early 

Dit gebruikt het time-outprogramma geleverd door het GNU coreutils-pakket op Linux.

Opmerkingen

  • werkt ' helaas niet op MacOS
  • timeout voor MacOS: stackoverflow.com/a/21118126/451480
  • Als u specifiek wilt controleren of timeout de e-commando (in tegenstelling tot het commando dat om andere redenen mislukt), controleer op exitstatus 124.

Answer

Gebruik timeout .

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

Opmerkingen

  • werkt niet ' helaas niet op MacOS

Antwoord

Gebruik de timeout verpakt als gtimeout met de coreutils poort in brew :

brew install coreutils gtimeout --help 

Dat “zal werken met /usr/local/bin in uw PATH. Als je timeout wilt gebruiken zoals oorspronkelijk genoemd, voeg dan /usr/local/opt/coreutils/libexec/gnubin toe aan je PATH.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *