ssh backspace exclui um caractere em vez de dois (utf-8 symbols)

2

Estou acessando um computador remoto usando ssh e executando um comando bash para inserir símbolos usando o fluxo de entrada padrão:

read test;echo $test

Não há problema em inserir letras em inglês e usar o backspace para excluí-las. Em seguida, insira outros caracteres e repita essas etapas quantas vezes quiser. Mas isso se torna um desastre quando uso outros símbolos utf-8, como os russos, que requerem 2 bytes em vez de 1, como os ingleses. Por exemplo, eu insiro:

абвгдежз

Depois disso, uso o retrocesso por 8 vezes e insiro outros símbolos:

привет

e pressione a tecla Enter. Mas em vez do resultado que seria igual a minha última entrada, recebo o seguinte:

абвгпривет

O que significa que 8 backspace deletaram apenas 4 símbolos.

Eu uso o Linux Ubuntu 12.04. Tentei diferentes consoles: um padrão, terminador; diferentes tipos de opções de retrocesso (como ASCII-del ou Ctrl + H); definindo $ LC_TYPE para ru_RU.UTF-8, mas nada funciona. Não existe esse problema usando o console local. Obrigado antecipadamente.

update: Eu também tenho um vídeo sobre esse problema, assista no youtube

    
por Vsevolod Avramov 24.04.2013 / 07:28

2 respostas

2

Você pode contornar isso executando

stty iutf8

no servidor cada vez que você ssh lá. Infelizmente este bug existe desde o ano de 2005, mas veja os fóruns debian para detalhes. Você também pode querer adicionar esta linha no final do seu arquivo .bashrc.

    
por 25.04.2013 / 03:18
2

Você precisa definir LC_CTYPE para uma localidade UTF-8, por exemplo ru_RU.UTF-8 ou en_US.UTF-8 . Você pode listar as localidades disponíveis usando locale -a .

    
por 24.04.2013 / 09:16