백스페이스 키를 누르면 ^H 문자가 나옵니다

앞 글자를 지우기 위해 백스페이키를 눌렀을 때 ^H(혹은 ^?) 문자가 출력되고 앞 글자는 지워지지 않는 경우가 있습니다.

앞 글자를 지우는 동작은 정확히는 커서를 앞에 보내고(Backspace) 스페이스 캐릭터를 발생한 후 다시 커서를 앞에 보내는 동작입니다.


이런 동작을 하도록 하는 시그널(혹은 명령)을 erase라고 합니다. 시스템마다 혹은 사용자의 설정에 따라 erase에 설정된 문자가 다를 수 있습니다.

사용자 환경에 설정된 erase 시그널 문자Xshell에서 보내는 문자가 일치하지 않을 경우 erase 명령이 작동하지 않고 해당 문자가 찍히게 됩니다.


현재 사용자에게 설정된 터미널 옵션들을 보기 위해서 다음 명령을 실행합니다.

$ stty -a
speed 9600 baud; line = 0;
rows = 24; columns = 77
min = 1; time = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U
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
...

위 설정에서는 ^? 문자에 erase 명령이 실행되도록 설정되어 있습니다.


이제는 Xshell에서 Backspace 키 입력 시 발생하는 문자를 확인합니다.


이처럼 stty의 erase 설정 값과 XshellBackspace 설정 값이 다를 경우 백스페이스 키를 눌렀을 때 글자가 지워지지 않고 Xshell의 백스페이스 시퀀스에 정한 값이 그대로 출력이 됩니다.


최근의 리눅스 환경에서는 이 두 값이 서로 상이하여도 백스페이스 키에 앞 글자가 지워지기도 하지만 오래된 리눅스나 유닉스 환경에서는 이 두 값이 일치하여야 원하는 결과를 얻을 수 있습니다.