O Bash exibe caracteres internacionais como sequências de escape

6

Quando pressiono determinadas teclas (por exemplo, umlauts alemão) na linha de comando bash, obtenho seqüências de escape. Por exemplo, ß me dá 3 . Essas seqüências de escape são tratadas como caracteres únicos, portanto, um backspace exclui toda a seqüência. O caractere é exibido incorretamente na linha de comando, mas é interpretado corretamente, por exemplo, digitando echo ß :

$ echo 3
ß

Eu acho que tem problemas com caracteres não-ASCII de 7 bits. Em todos os outros lugares, estes funcionam bem no entanto. Eu posso usá-los no vim ou exibi-los com o gato, e também os caracteres unicode funcionam bem.

Como posso fazer o bash exibir esses caracteres corretamente?

Para o registro,

TERM=xterm-256color
LANG=en_US.UTF-8

e do meu .inputrc:

set input-meta on      # Enable Meta input with eighth bit set
set meta-flag on       # Synonym for the above
set convert-meta off   # Do NOT strip the eighth bit
set output-meta on     # Enable Meta output with eighth bit set

saída de stty -a

speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

Esta pergunta sobre o Stackoverflow mostra o mesmo sintoma, mas a solução publicada não funciona: link

Eu também estou confiante de que meu terminal está configurado corretamente, pois funciona bem com o bash local, mas somente o bash em um determinado sistema remoto (via ssh) tem esse problema.

    
por jdm 04.05.2015 / 10:55

2 respostas

10

Você pode agradecer alguém chamado Lino Miguel Martins Tinoco de 2004 para este.

A documentação do GNU Readline para .inputrc não permite comentários em linha . Tanto o manual do shell GNU Bourne Again dizem:

Lines beginning with a '#' are comments.

A linha

set output-meta on     # Enable Meta output with eighth bit set
é não uma linha que começa com # . É uma linha com um # no meio. Como Lino Miguel Martins Tinoco descobriu, isso resulta na opção output-meta sendo desativada, não ativada, como é evidente na saída de bind -V quando xe a executou:
output-meta is set to 'off'
O script de shell

.inputrc is não . Como dito em o tutorial Linux From Scratch

Note that comments cannot be on the same line as commands.
    
por 04.05.2015 / 11:40
1

OK, parece que descobri. Eu apenas comentei as linhas no meu .inputrc e funciona:

#set input-meta on      # Enable Meta input with eighth bit set
#set meta-flag on       # Synonym for the above
#set convert-meta off   # Do NOT strip the eighth bit
#set output-meta on     # Enable Meta output with eighth bit set

Aparentemente, em .inputrc, comentários in-line não são suportados, portanto, todas as configurações são analisadas como off . Veja a resposta da JdeBP para detalhes.

Eu não sei porque essas configurações estavam lá em primeiro lugar. Eu estou no Scientific Linux Cern 6.6 (como o CentOS), e isso era presumivelmente o padrão para novos usuários. O irônico é que essas configurações são o padrão no meu sistema (definido em / etc / inputrc, mas sem comentários), então eles não são necessários em .inputrc, e eles fazem o oposto do que se pretende.

    
por 04.05.2015 / 11:23