Une autre simplification de la réponse de Martynas :
until ping -c1 www.google.com >/dev/null 2>&1; do :; done
Notez que ping lui-même est utilisé comme test de la boucle ; dès qu'il réussit, la boucle se termine. Le corps de la boucle est vide, avec la commande null " :
" utilisé pour éviter une erreur de syntaxe.
Mise à jour : J'ai trouvé un moyen de faire en sorte que Control-C quitte la boucle ping proprement. Ceci va exécuter la boucle en arrière-plan, capturer le signal d'interruption (Control-C), et tuer la boucle en arrière-plan si elle se produit :
ping_cancelled=false # Keep track of whether the loop was cancelled, or succeeded
until ping -c1 "$1" >/dev/null 2>&1; do :; done & # The "&" backgrounds it
trap "kill $!; ping_cancelled=true" SIGINT
wait $! # Wait for the loop to exit, one way or another
trap - SIGINT # Remove the trap, now we're done with it
echo "Done pinging, cancelled=$ping_cancelled"
C'est un peu compliqué, mais si vous voulez que la boucle soit annulable, cela devrait faire l'affaire.