Jag försöker köra något som:
sudo dhclient $wifi || otherFunction
Problemet är när dhclient misslyckas, det hänger bara i stället för att kasta ett fel.
Hur kan jag skriva om ovanstående så att dhclient är dödad och otherFunction blir kallad om dhclient slutar inte på 60 sekunder?
Svar
Din timeout -tagg ger allt bort:
sudo timeout 60 dhclient $wifi || otherFunction
Ett exempel:
sudo timeout 3 sleep 5 || echo finished early
Detta använder timeout-verktyget tillhandahålls av GNU coreutils-paketet på Linux.
Kommentarer
Svar
Använd timeout .
timeout 2 sleep 1 echo $? 0 timeout 1 sleep 2 echo $? 124
Kommentarer
- fungerar inte ' fungerar tyvärr inte på MacOS
Svar
Använd timeout packad som gtimeout med coreutils port i brew :
brew install coreutils gtimeout --help
Att ”jag kommer att arbeta med /usr/local/bin i din PATH. Om du vill använda timeout som ursprungligen namngivet, lägg till /usr/local/opt/coreutils/libexec/gnubin till din PATH.
timeoutför MacOS: stackoverflow.com/a/21118126/451480timeoutdödar e-kommandot (i motsats till att kommandot misslyckas av andra skäl), kontrollera om utgångsstatus 124.