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

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

원격 셸에 로그인했는데 문자를 삭제하려고 하면 삭제되는 문자가 시각적으로 표시되지 않고 그대로 유지되며 커서가 오른쪽으로 이동합니다. 이 쉘은 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대신 전송하도록 터미널 구성을 변경하십시오 ^?).

관련 정보