Réponses:
Vous pouvez utiliser some_commandcomme condition de test.
while ! some_command; do sleep 1; done
La condition restera vraie tant qu'elle se some_commandtermine avec une erreur.
Ou d'une manière plus détaillée si vous souhaitez effectuer des vérifications supplémentaires:
while ! some_command
do
# add more if desired
sleep 1
done
while ! some_command; do several; commands; sleep 1; done
Voici à quoi sert la untilboucle:
until some_command
do sleep 1
done
C'est la négation logique d'une whileboucle.
untilboucleLa untilboucle doit exécuter en continu une liste composée tant qu'une autre liste composée a un état de sortie non nul.
Le format de la boucle jusqu'à est le suivant:
jusqu'à compound-list-1
faire composé-liste-2
terminé
untilcommande se termine. Sinon, la liste composée-2 doit être exécutée et le processus se répète.Vous pouvez simplement faire:
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
cela a cependant l'inconvénient qu'il dort toujours une seconde en premier
Si vous voulez pouvoir quitter l'une des nombreuses commandes pour quitter avec 0, vous pouvez faire:
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
qui bien sûr fonctionne aussi pour seulement some_command
[et ]autour des commandes.
Ni while ! ...ne until ...fonctionne sur les systèmes qui ont gelé leur environnement shell avant POSIX.1-2001. Cela, cependant, le fait.
while :; do
if some command; then
break
fi
sleep 1
done
Si vous n'avez pas besoin d'une portabilité totale, pourquoi écrivez-vous un script shell? Perl est plus susceptible d'être disponible que Bash.
sleep 1 while 0 != system qw(some command);
(Comme ci-dessus, le sleep n'est exécuté que si la commande échoue.)