não pode inserir barra invertida com bash, python, funciona bem com csh, ocioso

4

Eu tenho um problema estranho ao inserir barras invertidas (Ubuntu 10.10 e 11.04, a atualização não mudou nada). A combinação de teclas no meu teclado (sueco Thinkpad T400) é AltGr +? No entanto, isso parece não ser o problema, pois só aparece com alguns programas.

Por exemplo, bash 4.2, python 2.7, python 3.2, swipl 5.10 Não consigo digitar nem copiar e colar barras invertidas no terminal. Com ash, csh, ghci, nano, vi, ocioso, idle3 tudo se comporta como esperado, eu posso digitar e copiar e colar. Por exemplo, copiando

echo gurka\\agurk

(quatro barras invertidas literais) e colando-o em csh (e, em seguida, pressionando enter), recebo

$ csh
% echo gurka\\agurk
gurka\agurk

mas com bash, recebo

$ echo gurkaagurk
gurkaagurk

Infelizmente, notei primeiro um bom tempo depois de muitas novas instalações e não posso dizer quando apareceu pela primeira vez. Eu suspeito de um bug ou configuração conflitante de alguma biblioteca comum para o primeiro grupo, mas não para o segundo, mas não tenho certeza de como continuar. É extremamente irritante e agradeço pelas dicas.

ATUALIZAÇÃO: o comportamento é o mesmo para o Konsole e o que você tiver com Ctrl-Alt-F1 (que é o que eu testei). Também não funciona com gnome-terminal e xterm, mas estes dois indicam erro (piscando). Ideias sobre o que verificar?

ATUALIZAÇÃO: O problema está resolvido graças a Gilles! Foi uma configuração incorreta da biblioteca readline (.inputrc)

Marcus

    
por Marcus 11.05.2011 / 16:04

1 resposta

7

Acho que os programas que você está usando usam a biblioteca readline para ler entrada. Então eu acho que você configurou mal a biblioteca readline. O arquivo de configuração do sistema é /etc/inputrc e o arquivo por usuário é ~/.inputrc . Você provavelmente coloca uma barra invertida demais em uma ligação, de modo que, em vez de vincular um comando a uma sequência de escape, você a vincula a uma sequência que começa com uma barra invertida.

Direita: "\e[1;5C": forward-word (sequência de escape enviada por Ctrl + Esquerda )
Errado: "\e[1;5C": forward-word ( \ e [ 1 ; 5 C )

Se o problema fosse apenas no bash, a ligação problemática estaria em ~/.bashrc . Observe que em .bashrc , a ligação acima seria escrita bind "\e[1;5C: forward-word" , com duas barras invertidas, porque o bash faz uma rodada de expansão de barra invertida antes de passar a definição para a linha de leitura. ( bind '\e[1;5C: forward-word' também funcionaria, pois as barras invertidas perdem seu significado especial entre aspas simples.)

    
por Gilles 11.05.2011 / 20:29