57 votes

Bash Loop - Comment arrêter la boucle lorsque j'appuie sur Control-C à l'intérieur d'une commande ?

Je rsyncise quelques répertoires. J'ai un terminal bash ouvert et j'exécute quelque chose comme ceci :

for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; done

Cependant, si je veux tout arrêter, j'appuie sur Control-C. Cela arrête le rsync, mais il continue à passer au suivant. Dans ce cas, je réalise ce qui s'est passé et j'appuie sur Control-C comme un fou jusqu'à ce que les choses fonctionnent à nouveau.

Existe-t-il un moyen de résoudre ce problème ? Je veux que si j'ai une boucle comme celle-là, et que j'appuie sur Control-C, cela me renvoie à mon Shell de bash.

1voto

Alan Porter Points 186

J'ai tendance à placer une autre commande dans ma boucle qui peut facilement être interrompue. Elle nécessite d'appuyer sur deux touches ctrl-C.

for DIR in * ; do rsync -a $DIR example.com:somewhere/ ; sleep 1 ; done

Ce n'est pas une solution idéale pour ce rsync, que vous voulez probablement exécuter rapidement. Mais elle fonctionne bien pour d'autres boucles, comme celle-ci :

while true ; do ping -c 10 example.com ; sleep 1 ; done

Cette boucle va rechercher à nouveau l'adresse de example.com à chaque fois qu'elle est parcourue, ce qui est utile si vous êtes à l'affût d'un changement de DNS.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X