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 Timeout -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.