Bash, pokud příkaz ' nedokončí za X čas?

Snažím se spustit něco jako:

sudo dhclient $wifi || otherFunction 

Problém je, když dhclient selže, místo zavržení chyby prostě visí.

Jak mohu přepsat výše uvedené, takže dhclient je zabit a otherFunction zavolán, pokud dhclient nedojde do 60 sekund?

Odpovědět

Vaše značka dává vše pryč:

sudo timeout 60 dhclient $wifi || otherFunction 

Příklad:

sudo timeout 3 sleep 5 || echo finished early 

Používá nástroj pro časový limit poskytované balíčkem GNU coreutils v systému Linux.

Komentáře

  • nefunguje ' bohužel na MacOS nefunguje
  • timeout pro MacOS: stackoverflow.com/a/21118126/451480
  • Pokud chcete konkrétně zkontrolovat timeout zabití Příkaz e (na rozdíl od příkazu, který selhal z jiných důvodů), zkontrolujte stav ukončení 124.

Odpověď

Použijte timeout .

timeout 2 sleep 1 echo $? 0 timeout 1 sleep 2 echo $? 124 

Komentáře

  • nefunguje ' bohužel v systému MacOS

odpověď

Použijte timeout zabalený jako gtimeout s coreutils port v brew :

brew install coreutils gtimeout --help 

To bude fungovat s /usr/local/bin ve vašem PATH. Pokud chcete použít timeout jak byl původně pojmenován, přidejte /usr/local/opt/coreutils/libexec/gnubin do svého PATH.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *