O Bash usa Biblioteca GNU Readline para entrada e edição de linha de comando. Infelizmente esta biblioteca processa a entrada apenas linha por linha. A readline()
chamada retorna após terminar a linha pressionando Enter . A próxima linha (depois de mostrar o prompt $PS2
" >
") é processada por uma chamada readline()
separada.
Quando você volta no histórico de edição para uma entrada de várias linhas, Readline trata a entrada como uma única "linha" com novas linhas (os prompts $PS2
não são exibidos) para que você possa editar toda a entrada de várias linhas como você descreveu.
Eu uso o seguinte truque para resolver o problema que você apresentou: Quando eu introduzo uma nova linha indesejada, eu a cancelo pressionando Ctrl + c . Então eu volto para a entrada cancelada pressionando ↑ (ou Ctrl + p ). Então eu posso remover a nova linha por Backspace e fazer outras edições.
Entre com uma nova linha indesejada no final, pressionando Ctrl + c :
$ cat 'xyz
> ^C
Depois de pressionar ↑ , a entrada retorna o evento sem a nova linha:
$ cat 'xyz