Alguns meses atrás, uma atualização do sistema fez com que meu shell não interpretasse mais as novas linhas à direita enterao colar um comando no terminal. Por exemplo, se eu escrever ls
no meu prompt e usar o mouse para selecionar ls
até o final da linha, espero poder clicar com o botão do meio em colar em um shell e ls
executar o comando. Este é o comportamento padrão que tenho usado há anos.
No entanto, meu sistema não faz mais isso. Eu posso colar o ls
, e posso ver que a nova linha também foi colada porque meu cursor se move para a próxima linha, mas apesar disso, o comando não é executado até que eu pressione enter(estou colocando isso em um spoiler porque é um gif animado e pode ser uma distração):
Na animação acima, você pode me ver selecionando uma linha ls
já escrita, limpando ls
e colando com o botão do meio. Observe como o cursor se move para a próxima linha, mas o ls
comando não é executado nesse ponto, mas somente depois que eu pressiono minha entertecla.
O realmente estranho, para mim, é que isso não é um problema com meu emulador de terminal ( terminator
). O mesmo terminal interpretará a nova linha como esperado se eu fizer o ssh em uma máquina diferente (mas não se eu fizer o ssh no localhost). Então tem que ser algum tipo de configuração no meu shell local.
Além disso, há um contexto em que funciona conforme o esperado: o read
builtin. Aqui, se eu selecionar uma linha incluindo a nova linha à direita, posso colá-la em um read
prompt de espera e a nova linha à direita é tomada como o caractere EOL, read
retornando. Então, por que não funciona fora desse contexto específico?
Tudo isso em um sistema Arch Linux, usando o modo GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
in emacs
. Para tornar as coisas ainda mais confusas, tenho esse problema ao usar bash
, zsh
ou , fish
mas não ao usar ksh
, ou . Nos últimos quatro shells, tenho meu comportamento desejado e a linha colada é executada imediatamente. Isso pode estar relacionado ?dash
tcsh
csh
readline
Como posso recuperar meu comportamento desejado e fazer com que quaisquer novas linhas coladas no meu shell sejam interpretadas?
A mudança de comportamento é capturada neste relatório "Não é um bug" com RedHat https://bugzilla.redhat.com/show_bug.cgi?id=1954366 , que faz referência à
readline
configuraçãoenable-bracketed-paste
:De fato, adicionar essa configuração
~/.inputrc
resolve o problema: colar uma nova linha incorporada executa o comando colado mais uma vez.Referências
Observe que vários usuários experientes aqui e em outros lugares alertam fortemente os usuários contra isso. Por exemplo, @muru escreve em um comentário que " isso é algo que eu recomendo FORTEMENTE não fazer. A única vez que isso impedirá que você execute acidentalmente um comando quebrado/perigoso significará que todas as vezes que você foi levemente incomodado por ter que pressionar enter será pago. "