La tecla de retroceso en el shell mueve el cursor hacia la derecha

La tecla de retroceso en el shell mueve el cursor hacia la derecha

Hay un shell remoto en el que inicio sesión, cuando intento eliminar un carácter, en lugar de mostrar visualmente el carácter que se elimina, permanece allí y el cursor se mueve hacia la derecha. Este shell ejecuta Bash.

Por ejemplo, si escribo echooy presiono Backspaceuna vez, el mensaje se verá así: echoo. Sin embargo, en realidad los caracteres que están presentes serán correctos ( echo) y si presiono Enterel comando funciona bien.

Por lo que puedo decir, es exactamente el mismo problema que se abrió.aquí. Yo también me estoy conectando a través de Kubernetes. El comando que ejecuto se parece a kubectl -n <some_kind_of_argument> exec -it <another_argument> -- bash.

Al leer otra pregunta, entiendo que la siguiente es información útil.


root# echo $TERM
xterm

Este no es el mismo valor que genera mi shell local ( xterm-256color). Lo siguiente no soluciona el problema.

root# export TERM=xterm-256color

Ahora comparto el resultado de 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

Ahora, presionar Ctrl+ vseguido de presionar Backspacemuestra esto:

root# ^?

Esto parece estar alineado con el resultado anterior ( erase = ^?). Al presionar Enter en el mensaje anterior se imprime. . .

bash: $'\177': command not found

También corrí stty sane, pero eso no ayudó.


¿Alguien puede ayudarme a solucionar este problema y, con suerte, también ayudarme a comprender qué está pasando?

Respuesta1

El shell/aplicación remota que está utilizando espera que se envíe retroceso ^H(lo que normalmente movería el cursor a la izquierda una celda en unTerminal). El shell/aplicación imprime un espacio para borrar el carácter. Pero no espera ^?(ASCII DEL, código 127), que generalmente no mueve el cursor en unTerminal.

Sin embargo, en realidad los caracteres que están presentes serán correctos (eco) y si presiono Enter, el comando se ejecuta bien.

El comentario en la pregunta dice que el shell/aplicación en realidad lo trata ^?como un carácter de borrado, pero en cierto sentido puede estar codificado. Pero si no está codificado, es posible que preste atención a la sttyconfiguración. Si es así, puede hacer esto en la inicialización de su shell (remota).

stty erase ^H

(un control real/ H...) y luego use ControlH, en lugar de Backspace(o cambie la configuración de su terminal para enviar ^Hen lugar de ^?).

información relacionada