Bash dacă nu se termină comanda ' în X timp?

Încerc să rulez ceva de genul:

sudo dhclient $wifi || otherFunction 

Problema este când dhclient nu reușește, doar se blochează în loc să arunce o eroare.

Cum pot rescrie cele de mai sus, astfel încât dhclient să fie ucis și otherFunction este apelat dacă dhclient nu se termină în 60 de secunde?

Răspunde

Eticheta dvs. oferă totul:

sudo timeout 60 dhclient $wifi || otherFunction 

Un exemplu:

sudo timeout 3 sleep 5 || echo finished early 

Aceasta folosește utilitarul timeout furnizat de pachetul GNU coreutils pe Linux.

Comentarii

  • ' nu funcționează din păcate pe MacOS
  • timeout pentru MacOS: stackoverflow.com/a/21118126/451480
  • Dacă doriți să verificați în mod special dacă timeout este ucis Comanda (spre deosebire de eșecul comenzii din alte motive), verificați starea de ieșire 124.

Răspuns

Utilizați timeout .

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

Comentarii

  • nu funcționează ' din Mac, din păcate

Răspuns

Utilizați timeout ambalat ca gtimeout cu coreutils port în brew :

brew install coreutils gtimeout --help 

Aceasta va funcționa cu /usr/local/bin în PATH. Dacă doriți să utilizați timeout așa cum a fost denumit inițial, adăugați /usr/local/opt/coreutils/libexec/gnubin la PATH.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *