Bash si la commande ne se termine pas dans le temps X?


13

J'essaie d'exécuter quelque chose comme:

sudo dhclient $wifi || otherFunction

Le problème est qu'en cas d' dhclientéchec, il se bloque simplement au lieu de lancer une erreur.

Comment puis-je réécrire ce qui précède afin qu'il dhclientsoit tué et otherFunctionsoit appelé si dhclientne se termine pas dans les 60 secondes?

Réponses:


13

Votre étiquette de d' donne tout:

sudo timeout 60 dhclient $wifi || otherFunction

Un exemple:

sudo timeout 3 sleep 5 || echo finished early

Cela utilise l' utilitaire de délai d'attente fourni par le paquet GNU coreutils sous Linux.


2
ne fonctionne pas sur MacOS malheureusement
Alexander Mills


Si vous souhaitez vérifier spécifiquement la timeoutsuppression de la commande (par opposition à l'échec de la commande pour d'autres raisons), vérifiez l'état de sortie 124.
muru


2

Utilisez l' timeoutemballage comme gtimeoutavec le coreutilsport dans brew:

brew install coreutils
gtimeout --help

Cela fonctionnera avec /usr/local/bindans votre PATH. Si vous souhaitez utiliser le timeoutnom d'origine, ajoutez-le /usr/local/opt/coreutils/libexec/gnubinà votre PATH.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.