Eu uso o Ubuntu 14.04 e tenho um problema estranho com a tela do meu terminal, que está me incomodando bastante. Alguém poderia me ajudar com isso ou me explicar se estou fazendo algo errado ou não-linux-way? Eu tenho algum tipo de solução, mas quero entender por que isso acontece repetidamente.
Costumo copiar comandos bash das minhas anotações ou da Internet e, às vezes, recebo símbolos estranhos 0 ~ e 1 ~ que envolvem coisas que copiei. É muito chato e isso acontece de forma totalmente aleatória.
Depois de uma longa pesquisa, descobri que essa coisa é chamada modo de colagem entre colchetes ; agora, uso esse comando printf "\e[?2004l"
para corrigir meu terminal se esse modo for ativado repentinamente.
É possível desativar esse recurso permanentemente de alguma forma? Eu o enfrentei em todas as máquinas Ubuntu em que trabalho agora. Anteriormente, usei o Ubuntu 10.10 e 12.04 e nunca tive esse problema antes.
fonte
bind
argumentos que não reconhece, é o que acontecerá se você executar este comando usando o Readline antes da versão 7 ou o Bash antes do 4.4. Esta resposta não fará nada de útil até a próxima versão do Ubuntu (17.04).printf
abordagem funciona, mas não funciona quando inserida na minha.bashrc
, e o recurso de alguma forma se ativa periodicamente. Abind
abordagem interrompe meu teclado (ap
tecla não funciona, and putting that line in my
~ / .inputrc` funciona por 10 segundos e, em seguida, o console começa a vomitar para-enaset-enaset-...
sempre após 10 segundos de uso. Eu finalmente atualizei manualmente o bash 4.4 da fonte para corrigir o estúpido problema:bind 'set enable-bracketed-paste off'
(com um espaço em vez do primeiro `-`` Edição apenas um personagem não parece possível..Você pode colocar esse comando no seu
bashrc
. Em seguida, ele se aplicaria toda vez que você abrir seu terminal.Basta digitar
vi ~/.bashrc
e adicionarprintf "\e[?2004l"
no final e salvar o arquivo com:wq
fonte
echo 'printf "\e[?2004l"' >> ~/.bashrc
faz a mesma coisa em uma linha e você pode verificar comtail -n1 ~/.bashrc
. Não há necessidade de usarvi
.Para responder à sua pergunta original sobre por que isso acontece, aqui está um cenário possível:
O problema é que meu programa de terminal ainda acha que a pasta entre colchetes está ativada quando o sshing do shell A para o shell B é ativado, por isso continua adicionando os caracteres ao redor do seu conteúdo colado (os bits 0 ~ e 1 ~). O Shell B não os suporta, apenas os passa inalterados. Você precisa dizer ao seu terminal para desativar a pasta entre parênteses, fazendo com que seu shell imprima uma sequência de escape especial - que é o que
printf "\e[?2004l"
faz.Existem algumas maneiras de resolver o problema:
Se você não se importa com a pasta entre colchetes, desative-a no shell A para que nunca seja ativada em primeiro lugar (resposta de @ jwd)
Se você quiser continuar usando pasta entre parênteses no shell A, mas desabilitar no shell B, adicione a sequência de escape à sua
.bashrc
(resposta do @ MOHRE)Atualize o shell B para oferecer suporte à pasta entre colchetes, para que ele interprete adequadamente os caracteres 0 ~ e 1 ~.
Nota lateral: se você estiver usando a tela GNU, precisará executar esse
printf
comando fora da tela. Não parece funcionar enquanto estiver dentro.fonte