Bash if-kommandot slutar ' inte på X-tid?

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 -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

  • fungerar inte ' fungerar tyvärr inte på MacOS
  • timeout för MacOS: stackoverflow.com/a/21118126/451480
  • Om du vill kontrollera specifikt om timeout dödar e-kommandot (i motsats till att kommandot misslyckas av andra skäl), kontrollera om utgångsstatus 124.

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *