Bash if kommando slutter ' ikke om X-tid?

Jeg prøver at køre noget som:

sudo dhclient $wifi || otherFunction 

Problemet er når dhclient mislykkes, det hænger bare i stedet for at kaste en fejl.

Hvordan kan jeg omskrive ovenstående, så dhclient er dræbt og otherFunction bliver kaldt, hvis dhclient slutter ikke på 60 sekunder?

Svar

Dit -tag giver det hele væk:

sudo timeout 60 dhclient $wifi || otherFunction 

Et eksempel:

sudo timeout 3 sleep 5 || echo finished early 

Dette bruger timeout-værktøj leveret af GNU coreutils-pakken på Linux.

Kommentarer

  • fungerer ' t desværre ikke på MacOS
  • timeout til MacOS: stackoverflow.com/a/21118126/451480
  • Hvis du specifikt vil kontrollere, om timeout dræber th e-kommandoen (i modsætning til kommandoen, der mislykkes af andre årsager), skal du kontrollere, om der er exit-status 124.

Svar

Brug timeout .

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

Kommentarer

  • fungerer ' desværre ikke på MacOS

Svar

Brug timeout pakket som gtimeout med coreutils port i brew :

brew install coreutils gtimeout --help 

At “jeg vil arbejde med /usr/local/bin i din PATH. Hvis du vil bruge timeout som oprindeligt navngivet, skal du tilføje /usr/local/opt/coreutils/libexec/gnubin til din PATH.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *