Jak wprowadzić / uruchomić nową linię w terminalu bash?

11

Zauważam, że niektóre przykładowe bash dla pętli są rozłożone w wielu liniach w przykładach

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

(np. tutaj http://www.cyberciti.biz/faq/bash-for-loop/ ) Jak wprowadzić nowy wiersz w terminalu bash (używam szpachli)? Kiedy naciskam Enter na końcu linii, system wykonuje to.

giorgio79
źródło
1
Również bashmożna użyć kombinację klawiszy Ctrl + x + e, aby otworzyć zawartość wiersza polecenia w edytorze takich jak vim, gdzie można pracować na nim łatwiej, kiedy skończysz można wyjść z edytora, a komenda będzie uruchamiane.
slm
Powiązana odpowiedź: unix.stackexchange.com/questions/232912/…
Kusalananda

Odpowiedzi:

28

Po naciśnięciu Enterna końcu:

for VARIABLE in file1 file2 file3

Powłoka nie może nic wykonać, ponieważ ta forpętla nie jest zakończona. Zamiast tego wypisze inny monit, $PS2monit (ogólnie >), aż do momentu zamknięcia done.

Jednak po >wyświetleniu komunikatu nie można wrócić do edycji pierwszego wiersza.

Alternatywnie, zamiast pisać Enter, możesz pisać Ctrl-VCtrl-J. W ten sposób znak nowej linii (aka ^J) jest wprowadzany bez akceptacji bieżącego bufora , a następnie możesz wrócić do edycji pierwszego wiersza później.

W zsh, można nacisnąć przycisk Alt-Enterlub EscEnter, aby wstawić znak nowej linii bez zapisywania bieżącego bufora. Aby uzyskać takie samo zachowanie bash, możesz dodać do ~/.inputrc:

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

( \026będąc ^Vpostacią).

Stéphane Chazelas
źródło
Ctrl-Jzacząć i Ctrl-Dskończyć, skończyło się dla mnie dobrze.
DuckMaestro