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 timeout -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
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
.
timeout
til MacOS: stackoverflow.com/a/21118126/451480timeout
dræber th e-kommandoen (i modsætning til kommandoen, der mislykkes af andre årsager), skal du kontrollere, om der er exit-status 124.