Para responder à sua pergunta original sobre por que isso acontece, aqui está um cenário possível:
- Meu computador doméstico tinha uma nova versão do zsh que suportava colar entre colchetes (vamos chamá-lo de shell A)
- Eu fiz ssh em um computador com meu shell configurado para uma versão mais antiga do bash, que não suporta colar entre colchetes (shell B)
O problema é que o meu programa de terminal ainda pensa que colar entre colchetes é habilitado ao passar do shell A para o shell B, então ele continua adicionando os caracteres ao redor do seu conteúdo colado (0 ~ e 1 ~ bits). O Shell B não os suporta, então apenas os mantém inalterados. Você precisa dizer ao seu terminal para desativar a colagem entre colchetes fazendo com que o seu shell imprima uma seqüência de escape especial - que é o que o printf "\e[?2004l"
faz.
Existem algumas maneiras de resolver o problema:
-
Se você não se importa com a colagem entre colchetes, desative-a no shell A para que ela nunca seja ativada (resposta do @ jwd)
-
Se quiser continuar usando a colagem entre colchetes no shell A, mas desabilitar no shell B, adicione a sequência de escape ao seu .bashrc
(resposta do @MHHRE)
-
Atualize o shell B para suportar a colagem entre colchetes, para que interprete adequadamente os caracteres 0 ~ e 1 ~.
Nota: se você estiver usando a tela GNU, você precisa executar o comando printf
fora da tela. Não parece funcionar enquanto dentro.