Bash jos komento ei ' ole valmis X-aikaan?

Yritän suorittaa jotain tällaista:

sudo dhclient $wifi || otherFunction 

Ongelma on, kun dhclient epäonnistuu, se vain jumittuu virheen heittämisen sijaan.

Kuinka voin kirjoittaa yllä mainitun uudelleen niin, että dhclient on tapettu ja otherFunction kutsutaan, jos dhclient ei ole valmis 60 sekunnissa?

Vastaa

-tagisi antaa kaiken pois:

sudo timeout 60 dhclient $wifi || otherFunction 

Esimerkki:

sudo timeout 3 sleep 5 || echo finished early 

Tämä käyttää aikakatkaisuohjelmaa tarjoaa GNU coreutils -paketti Linuxissa.

Kommentit

  • ei toimi ' valitettavasti MacOS: ssa
  • timeout MacOS: stackoverflow.com/a/21118126/451480
  • Jos haluat tarkistaa erityisesti timeout tappamisen e-komento (toisin kuin komento epäonnistuu muista syistä), tarkista poistumistila 124.

Vastaa

Käytä timeout .

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

Kommentit

  • ei toimi ' ei toimi valitettavasti MacOS-käyttöjärjestelmässä

Vastaa

Käytä timeout -tunnusta gtimeout muodossa coreutils -portti brew :

brew install coreutils gtimeout --help 

Että ”työskentelen /usr/local/bin kanssa PATH -palvelussa. Jos haluat käyttää timeout -tunnusta alun perin nimeltään, lisää /usr/local/opt/coreutils/libexec/gnubin PATH -kansioon.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *