쉘의 백스페이스는 커서를 오른쪽으로 이동합니다.

쉘의 백스페이스는 커서를 오른쪽으로 이동합니다.

제가 로그인하는 원격 셸이 있는데, 문자를 삭제하려고 하면 삭제되는 문자를 시각적으로 표시하는 대신 문자가 그대로 남아 있고 커서가 오른쪽으로 이동합니다. 이 쉘은 Bash를 실행하고 있습니다.

예를 들어, 입력 echoo하고 Backspace한 번 누르면 프롬프트는 다음과 같이 표시됩니다 echoo. 그러나 실제로 존재하는 문자는 정확하며( ) 명령을 echo누르면 정상적으로 실행됩니다.Enter

내가 아는 한, 그것은 공개된 문제와 정확히 같은 문제입니다.여기. 저도 Kubernetes를 통해 연결하고 있습니다. 내가 실행하는 명령은 다음과 같습니다 kubectl -n <some_kind_of_argument> exec -it <another_argument> -- bash.

다른 질문을 읽어보니 다음 내용이 유용한 정보라는 것을 알게 되었습니다.


root# echo $TERM
xterm

이는 내 로컬 셸( )에서 출력되는 값과 다릅니다 xterm-256color. 다음으로는 문제가 해결되지 않습니다.

root# export TERM=xterm-256color

이제 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

이제 Ctrl+를 누른 v후 다음을 누르면 Backspace다음과 같이 표시됩니다.

root# ^?

이는 위의 출력( erase = ^?)과 일치하는 것 같습니다. 위 프롬프트에서 Enter를 누르면 인쇄됩니다. . .

bash: $'\177': command not found

나도 달렸 stty sane지만 도움이되지 않았습니다.


누군가 이 문제를 해결하도록 도와주고 무슨 일이 일어나고 있는지 이해하도록 도와줄 수 있습니까?

답변1

사용 중인 원격 셸/응용 프로그램은 백스페이스를 보낼 것으로 예상합니다 ^H(일반적으로 커서를 한 셀 왼쪽으로 이동합니다).단말기). 셸/응용 프로그램은 문자를 지우기 위해 공백을 인쇄합니다. 그러나 ^?일반적으로 커서를 이동하지 않는(ASCII DEL, 코드 127) 것은 예상하지 않습니다 .단말기.

그러나 실제로 존재하는 문자는 정확하며(에코) Enter 키를 누르면 명령이 제대로 실행됩니다.

질문의 설명에 따르면 셸/응용 프로그램은 실제로 ^?지우기 문자로 처리되지만 어떤 의미에서는 하드 코딩될 수 있습니다. 하지만 하드코딩되지 않은 경우에는 설정에 주의를 기울일 수도 있습니다 stty. 그렇다면 (원격) 쉘 초기화에서 이 작업을 수행할 수 있습니다.

stty erase ^H

(실제 제어/ H...) 대신에 ControlH을 사용하십시오(또는 대신에 Backspace전송하도록 터미널 구성을 변경하십시오 ).^H^?

관련 정보