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


12

Ich versuche so etwas wie:

sudo dhclient $wifi || otherFunction

Das Problem ist, wenn es dhclientfehlschlägt, hängt es nur, anstatt einen Fehler zu werfen.

Wie kann ich das oben Gesagte umschreiben, damit dhclientes getötet und otherFunctionaufgerufen wird, wenn dhclientes nicht in 60 Sekunden fertig ist?

Antworten:


12

Ihr Tag verrät alles:

sudo timeout 60 dhclient $wifi || otherFunction

Ein Beispiel:

sudo timeout 3 sleep 5 || echo finished early

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


2
funktioniert unter MacOS leider nicht
Alexander Mills


Wenn Sie speziell prüfen möchten, ob timeoutder Befehl beendet wurde (im Gegensatz dazu, dass der Befehl aus anderen Gründen fehlschlägt), prüfen Sie, ob der Exit-Status 124
vorliegt.


2

Verwenden Sie die timeoutverpackte wie gtimeoutmit dem coreutilsPort in brew:

brew install coreutils
gtimeout --help

Das klappt mit /usr/local/bin dir PATH. Wenn Sie timeoutwie ursprünglich benannt verwenden möchten , fügen Sie /usr/local/opt/coreutils/libexec/gnubinIhrer hinzu PATH.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.