Bash, ha a parancs nem ' fejeződik be X idő alatt?

Ilyeneket próbálok futtatni:

sudo dhclient $wifi || otherFunction 

A probléma az, amikor div id = “fd63bd58c2″>

nem sikerül, csak lefagy, ahelyett, hogy hibát dobna.

Hogyan írhatom újra a fentieket, így dhclient megölik és otherFunction hívják, ha dhclient nem fejeződik be 60 másodpercen belül?

Válasz

A címke mindent elárul:

sudo timeout 60 dhclient $wifi || otherFunction 

Példa:

sudo timeout 3 sleep 5 || echo finished early 

Ez a timeout segédprogramot használja a GNU coreutils csomag nyújtja Linux rendszeren.

Megjegyzések

  • nem működik ' sajnos a MacOS-on
  • timeout MacOS rendszerhez: stackoverflow.com/a/21118126/451480
  • Ha azt szeretné ellenőrizni, hogy timeout megöli-e e parancsot (ellentétben azzal, hogy a parancs más okból nem működik), ellenőrizze a 124. kilépési állapotot.

Válasz

Használja a timeout parancsot.

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

Megjegyzések

  • nem ' sajnos nem működnek a MacOS-on

válasz

Használja a timeout -t gtimeout formátumba csomagolva a coreutils port a brew portban:

brew install coreutils gtimeout --help 

Ez “/usr/local/bin vel fog működni a PATH. Ha az eredetileg megnevezett timeout szót szeretné használni, adja hozzá a /usr/local/opt/coreutils/libexec/gnubin elemet a PATH

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük