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
timeout -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
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
.
timeout
for MacOS: stackoverflow.com/a/21118126/451480timeout
drepe e-kommandoen (i motsetning til at kommandoen mislykkes av andre grunner), sjekk for utgangsstatus 124.