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 '
-
timeoutfür MacOS: stackoverflow.com/a/21118126/451480 - Wenn Sie speziell nach
timeoutsuchen 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.