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
.
timeout
för MacOS: stackoverflow.com/a/21118126/451480timeout
dödar e-kommandot (i motsats till att kommandot misslyckas av andra skäl), kontrollera om utgångsstatus 124.