Como inserir / iniciar uma nova linha no terminal bash?

11

Percebo que algumas amostras de amostras para loops estão espalhadas por várias linhas em exemplos

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

(por exemplo, aqui http://www.cyberciti.biz/faq/bash-for-loop/ ) Como insiro uma nova linha no terminal bash (uso massa de vidraceiro)? Quando pressiono enter no final de uma linha, o sistema a executa.

giorgio79
fonte
1
Também bashé possível usar a combinação de teclado Ctrl + x + epara abrir o conteúdo do prompt de comando em um editor como o vim, onde você pode trabalhar com mais facilidade. Quando terminar, você pode sair do editor e o comando será executado.
slm
Resposta relacionada: unix.stackexchange.com/questions/232912/…
Kusalananda

Respostas:

28

Quando você pressiona Enterno final de:

for VARIABLE in file1 file2 file3

O shell não pode executar nada, pois esse forloop não está concluído. Então, em vez disso, ele imprimirá um prompt diferente, o $PS2prompt (geralmente >), até você inserir o fechamento done.

No entanto, após a >exibição, você não pode voltar para editar a primeira linha.

Como alternativa, em vez de digitar Enter, você pode digitar Ctrl-VCtrl-J. Dessa forma, o caractere de nova linha (aka ^J) é inserido sem que o buffer atual seja aceito e você pode voltar a editar a primeira linha posteriormente.

Em zsh, você pode pressionar Alt-Enterou EscEnterpara inserir um caractere de nova linha sem aceitar o buffer atual. Para obter o mesmo comportamento bash, você pode adicionar ao seu ~/.inputrc:

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

( \026sendo o ^Vpersonagem).

Stéphane Chazelas
fonte
Ctrl-Jcomeçar e Ctrl-Dterminar acabou funcionando bem para mim.
DuckMaestro