백스페이스 키에 이전 글자가 지워지지 않고 커서만 이동합니다
stty의 erase 문자와 Xshell의 Backspace 시퀀스를 같게 하여 이전 글자를 지우도록 하고자 하는데,
백스페이스 키에 커서만 이전으로 이동하고 문자는 지워지지 않는 현상입니다.
최근의 리눅스나 유닉스에 있는 셸에서는 이런 현상이 잘 발생하지 않지만
오래된 유닉스/리눅스나 일부 네트워크 장비에서는 이런 현상이 생길 수 있습니다.
이런 경우에도 실제로는 글자가 지워진 상태로 명령이 전달되지만 사용자들은 불안하거나 불편할 수 있습니다.
이 문제는 터미널의 에코(echo) 기능과 관련된 문제로 터미널 옵션에서는 echoe 옵션이 이와 관련된 에코 옵션입니다.
$ stty -a
speed 9600 baud; line = 0;
rows = 24; columns = 95
min = 4; time = 0;
intr = DEL; quit = ^\; erase = ^H; kill = @
eof = ^D; eol = ^@; eol2 <undef>; swtch <undef>
stop = ^S; start = ^Q; susp <undef>; dsusp <undef>
werase <undef>; lnext <undef>
parenb -parodd cs7 -cstopb hupcl -cread -clocal -loblk -crts
-ignbrk brkint ignpar -parmrk -inpck istrip -inlcr -igncr icrnl -iuclc
ixon -ixany -ixoff -imaxbel -rtsxoff -ctsxon -ienqak
isig icanon -iexten -xcase echo -echoe -echok -echonl -noflsh
...
이 상태라면 백스페이스 키에 이전 글자가 지워지지 않은 것처럼 보일 가능성이 있습니다(서버에 전달할 문자열에서는 지워졌지만).
다음 명령으로 echoe의 설정을 바꿉니다.
$ stty echoe
대부분의 시스템에서는 echoe 설정만으로 이 문제가 해결됩니다.
하지만 일부 시스템은 echoe 값이 켜져 있음에도 이전 글자가 지워지지 않는 경우가 있습니다.
이 경우에는 터미널 클라이언트 자체적으로 이전 글자를 지우도록 할 수 있습니다.
다음 설정이 필요합니다.
서버 설정
$ stty erase '^?'
- Xshell 설정
- Backspace 시퀀스 : ^?
- 'BACKSPACE 신호 시 강제로 글자 삭제' 옵션