Bash, wenn der Befehl ' nicht in X-Zeit beendet wird?

Ich versuche, Folgendes auszuführen:

sudo dhclient $wifi || otherFunction 

Problem ist, wenn dhclient schlägt fehl, es hängt nur, anstatt einen Fehler auszulösen.

Wie kann ich das Obige neu schreiben, damit dhclient ist getötet und otherFunction wird aufgerufen, wenn dhclient nicht in 60 Sekunden beendet ist?

Antwort

Ihr -Tag verrät alles:

sudo timeout 60 dhclient $wifi || otherFunction 

Ein Beispiel:

sudo timeout 3 sleep 5 || echo finished early 

Hierbei wird das Timeout-Dienstprogramm verwendet bereitgestellt vom GNU coreutils-Paket unter Linux.

Kommentare

  • funktioniert unter MacOS leider nicht '
  • timeout für MacOS: stackoverflow.com/a/21118126/451480
  • Wenn Sie speziell nach timeout suchen möchten, töten Sie th Überprüfen Sie den Befehl (im Gegensatz zu dem Befehl, der aus anderen Gründen fehlschlägt) auf den Exit-Status 124.

Antwort

Verwenden Sie timeout .

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

Kommentare

  • funktioniert nicht ' funktioniert unter MacOS leider nicht

Antwort

Verwenden Sie die timeout, die als gtimeout mit der Port in brew :

brew install coreutils gtimeout --help 

Das funktioniert mit /usr/local/bin in Ihrer PATH. Wenn Sie timeout wie ursprünglich benannt verwenden möchten, fügen Sie /usr/local/opt/coreutils/libexec/gnubin zu Ihrer PATH hinzu.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.