Backspace no shell move o cursor para a direita

Backspace no shell move o cursor para a direita

Existe um shell remoto no qual eu faço login, quando tento deletar um caractere, em vez de mostrar visualmente o caractere que está sendo deletado, ele permanece lá e o cursor se move para a direita. Este shell está executando o Bash.

Por exemplo, se eu digitar echooe pressionar Backspaceuma vez, o prompt ficará assim: echoo. Porém, na realidade os caracteres que estão presentes estarão corretos ( echo) e se eu acertar Entero comando funciona bem.

Pelo que posso dizer, é exatamente o mesmo problema que foi abertoaqui. Eu também estou me conectando por meio do Kubernetes. O comando que executo se parece com kubectl -n <some_kind_of_argument> exec -it <another_argument> -- bash.

Ao ler outra pergunta, percebo que o seguinte é uma informação útil.


root# echo $TERM
xterm

Este não é o mesmo valor gerado pelo meu shell local ( xterm-256color). O seguinte não resolve o problema.

root# export TERM=xterm-256color

Agora compartilho a saída do stty -a.

root# stty -a
speed 38400 baud; rows 43; columns 118; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-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 -flusho -extproc

Agora, pressionar Ctrl+ vseguido de pressionar Backspaceexibe isto:

root# ^?

Isso parece alinhado com a saída acima ( erase = ^?). Pressionar enter no prompt acima é impresso. . .

bash: $'\177': command not found

Eu também corri stty sane, mas isso não ajudou.


Alguém pode me ajudar a consertar isso e espero que também me ajude a entender o que está acontecendo?

Responder1

O shell/aplicativo remoto que você está usando espera backspace para enviar ^H(o que normalmente moveria o cursor para a esquerda em uma célula em umterminal). O shell/aplicativo imprime um espaço para apagar o caractere. Mas não espera ^?(ASCII DEL, código 127), que geralmente não move o cursor em umaterminal.

Porém, na realidade os caracteres presentes estarão corretos (eco) e se eu pressionar Enter o comando funciona bem.

O comentário na pergunta diz que o shell/aplicativo realmente trata ^?como um caractere de apagamento, mas em certo sentido pode ser codificado. Mas se não estiver codificado, poderá prestar atenção à sttyconfiguração. Se isso acontecer, você poderia fazer isso na inicialização do shell (remoto)

stty erase ^H

(um controle real/ H...) e então use ControlH, em vez de Backspace(ou altere a configuração do seu terminal para enviar ^Hem vez de ^?).

informação relacionada