GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Loop - Comment arrêter la boucle lorsque j'appuie sur Control-C dans une commande ?

Solution 1 :

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

Cela sortira également de la boucle si une exécution individuelle de rsync échoue pour une raison quelconque.

Solution 2 :

Pour développer la réponse de Dennis, votre code pourrait ressembler à :

trap "echo Exited!; exit;" SIGINT SIGTERM

Pour un exemple de travail (qui implique rsync), consultez http://gist.github.com/279849.

Solution 3 :

Vous pouvez définir un piège pour Control-C.

trap <command> SIGINT

exécutera le command lorsque Control-C est pressé. Mettez simplement le trap déclaration quelque part dans votre script à un point où vous voulez qu'elle devienne effective.

Solution 4 :

  1. Appuyez sur Ctrl-Z pour suspendre le script;
  2. kill %%

Crédits, explications et plus de détails dans cette réponse.

Solution 5 :

Lorsque vous mettez une chaîne de commandes entre parenthèses, la chaîne agira comme un processus unique, recevra le SIGINT et se terminera lorsque vous appuyez sur Ctrl -C :

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

Mais! Dans le cas du rsync commande, il autorise plusieurs sources, donc le code que vous avez écrit serait mieux écrit comme suit :

rsync -a * example.com:somewhere/

Linux
  1. Comment écrire une boucle dans Bash

  2. Comment arrêter le script Loop Bash dans le terminal ?

  3. Comment voir la ligne de commande exacte en cours d'exécution dans une instance Bash ?

  4. Comment programmer une commande Rsync ?

  5. Comment ajouter une icône à l'invite bash

Comment utiliser la commande Bash let {avec exemples}

Comment utiliser la commande de lecture Bash

Comment utiliser la commande Rsync sous Linux ?

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find

Comment puis-je rappeler l'argument de la commande bash précédente ?

Comment obtenir le statut de sortie d'une boucle dans bash