Comment entrer / démarrer une nouvelle ligne dans le terminal bash?

11

Je remarque que certains exemples de bash pour les boucles sont répartis sur plusieurs lignes dans les exemples

for VARIABLE in file1 file2 file3
do
    command1 on $VARIABLE
    command2
    commandN
done

(par exemple ici http://www.cyberciti.biz/faq/bash-for-loop/ ) Comment entrer une nouvelle ligne dans le terminal bash (j'utilise du mastic)? Lorsque j'appuie sur Entrée à la fin d'une ligne, le système l'exécute.

giorgio79
la source
1
Également bashvous pouvez utiliser la combinaison de touches Ctrl + x + epour ouvrir le contenu de l'invite de commande dans un éditeur tel que vim où vous pouvez travailler plus facilement, lorsque vous avez terminé , vous pouvez quitter l'éditeur et la commande sera exécutée.
slm
Réponse connexe: unix.stackexchange.com/questions/232912/…
Kusalananda

Réponses:

28

Lorsque vous appuyez Enterà la fin de:

for VARIABLE in file1 file2 file3

Le shell ne peut rien exécuter car cette forboucle n'est pas terminée. Au lieu de cela, il imprimera une invite différente, l' $PS2invite (généralement >), jusqu'à ce que vous entriez la fermeture done.

Cependant, après que >s'affiche, vous ne pouvez pas revenir en arrière pour modifier la première ligne.

Alternativement, au lieu de taper Enter, vous pouvez taper Ctrl-VCtrl-J. De cette façon, le caractère de nouvelle ligne (aka ^J) est entré sans que le tampon actuel soit accepté , et vous pouvez ensuite revenir à l'édition de la première ligne plus tard.

Dans zsh, vous pouvez appuyer sur Alt-Enterou EscEnterpour insérer un caractère de nouvelle ligne sans accepter le tampon actuel. Pour obtenir le même comportement bash, vous pouvez ajouter à votre ~/.inputrc:

"\e\C-m": "\026\n"

( \026étant le ^Vpersonnage).

Stéphane Chazelas
la source
Ctrl-Jcommencer et Ctrl-Dfinir a fini par bien fonctionner pour moi.
DuckMaestro