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 echoo
y 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 stty
configuració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 ^H
en lugar de ^?
).