Si vous voulez la boucle while pour arrêter après un certain état, et votre foo
commande renvoie une valeur non nulle lorsque cette condition est remplie, vous pouvez obtenir la boucle pour briser comme ceci:
while foo; do echo 'sleeping...'; sleep 5; done;
Par exemple, si la commande foo
supprime des éléments par lots, elle renvoie 1 lorsqu'il n'y a plus rien à supprimer.
Cela fonctionne bien si vous avez un script personnalisé qui doit exécuter une commande plusieurs fois jusqu'à certaines conditions. Vous écrivez le script pour quitter avec 1
lorsque la condition est remplie et quittez avec 0
lorsqu'il doit être réexécuté. Par exemple, supposons que vous ayez un script python batch_update.py
qui met à jour 100 lignes dans une base de données et renvoie 0
s'il y en a plus à mettre à jour et 1
s'il n'y en a plus. La commande suivante vous permettra de mettre à jour les lignes 100 à la fois en dormant pendant 5 secondes entre les mises à jour:
while batch_update.py; do echo 'sleeping...'; sleep 5; done;
remplacez les nouvelles lignes par des points-virgules. La même chose fonctionne pour les boucles for. – Tom
@Tom: ça ne marche pas toujours. après le faire, vous devez avoir la première commande, pas un point-virgule –