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

Jessaye dexécuter quelque chose comme:

sudo dhclient $wifi || otherFunction 

Le problème est quand dhclient échoue, il se bloque au lieu de lancer une erreur.

Comment puis-je réécrire ce qui précède pour que dhclient soit tué et otherFunction est appelé si dhclient ne se termine pas dans 60 secondes?

Réponse

Votre balise donne tout:

sudo timeout 60 dhclient $wifi || otherFunction 

Un exemple:

sudo timeout 3 sleep 5 || echo finished early 

Cela utilise lutilitaire de temporisation fourni par le paquet GNU coreutils sous Linux.

Commentaires

  • ne ' ne fonctionne malheureusement pas sous MacOS
  • timeout pour MacOS: stackoverflow.com/a/21118126/451480
  • Si vous souhaitez vérifier spécifiquement timeout tuer e commande (par opposition à léchec de la commande pour dautres raisons), vérifiez létat de sortie 124.

Réponse

Utilisez timeout .

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

Commentaires

  • ne ' ne fonctionne malheureusement pas sous MacOS

Réponse

Utilisez le timeout emballé comme gtimeout avec le coreutils Port dans brew :

brew install coreutils gtimeout --help 

Cela « fonctionnera avec /usr/local/bin dans votre PATH. Si vous souhaitez utiliser timeout comme nom dorigine, ajoutez /usr/local/opt/coreutils/libexec/gnubin à votre PATH.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *