Bash는 국제 문자를 이스케이프 시퀀스로 표시합니다.

Bash는 국제 문자를 이스케이프 시퀀스로 표시합니다.

bash 명령줄에서 특정 키(예: 독일어 움라우트)를 누르면 이스케이프 시퀀스가 ​​나타납니다. ß예 를 들어 \303, 이 이스케이프 시퀀스는 단일 문자로 처리되므로 백스페이스를 한 번 누르면 전체 시퀀스가 ​​삭제됩니다. 이 문자는 명령줄에 오류를 표시할 뿐이지만 올바르게 해석됩니다. 예를 들어 입력하면 echo ß다음과 같습니다.

$ echo \303
ß

7비트가 아닌 ASCII 문자에 문제가 있는 것 같습니다. 그러나 다른 곳에서는 모두 잘 작동합니다. vim에서 사용하거나 cat으로 표시할 수 있으며 유니코드 문자는 잘 작동합니다.

bash에서 이러한 문자를 올바르게 표시하려면 어떻게 해야 합니까?


기록을 위해,

TERM=xterm-256color
LANG=en_US.UTF-8

그리고 내 .inputrc에서:

set input-meta on      # Enable Meta input with eighth bit set
set meta-flag on       # Synonym for the above
set convert-meta off   # Do NOT strip the eighth bit
set output-meta on     # Enable Meta output with eighth bit set

산출stty -a

speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-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

이 Stackoverflow 질문은 동일한 증상을 보여 주지만 게시된 솔루션이 작동하지 않습니다.https://stackoverflow.com/questions/13094248/how-do-i-get-accented-letters-to-actually-work-on-bash

또한 내 터미널이 로컬 bash에서 잘 작동하므로 올바르게 구성되었다고 확신하지만 일부 원격 시스템(ssh를 통해)의 bash에서만 이 문제가 발생합니다.

답변1

고마워해도 돼Lino Miguel Martins Tinoco라는 남자2004년부터.

이것GNU Readline 문서.inputrc인라인 댓글은 허용되지 않습니다. 그것과GNU Bourne Again 쉘 매뉴얼설명하다:

"#"으로 시작하는 줄은 주석입니다.

set output-meta on # 여덟 번째 비트 세트로 메타 출력을 활성화합니다.
아니요로 시작하는 줄 #. 이것은 #중간에 a가 있는 선입니다. Lino Miguel Martins Tinoco가 발견한 것처럼 이로 인해 옵션을 output-meta실행할 때 xe 출력에 표시되는 것처럼 옵션이 켜지지 않고 꺼지게 됩니다 .bind -V

출력 메타가 "off"로 설정되어 있습니다.

.inputrc아니요쉘 스크립트. 에 명시된 바와 같이처음부터 리눅스 튜토리얼

주석은 명령과 같은 줄에 있을 수 없습니다.

답변2

알았어, 알아낸 것 같아. 난 그냥주석 처리됨내 라인과 작동합니다 .inputrc:

#set input-meta on      # Enable Meta input with eighth bit set
#set meta-flag on       # Synonym for the above
#set convert-meta off   # Do NOT strip the eighth bit
#set output-meta on     # Enable Meta output with eighth bit set

분명히 .inputrc에서는 인라인 주석이 지원되지 않으므로 모든 설정이 구문 분석됩니다 off.JdeBP의 답변더 알아보기.

애초에 이런 설정이 왜 존재하는지 모르겠습니다. 저는 Scientific Linux Cern 6.6(예: CentOS)을 사용하고 있는데, 이는 신규 사용자의 기본값일 수 있습니다. 아이러니하게도 이러한 설정은 내 시스템의 기본값(/etc/inputrc에 설정되어 있지만 주석 처리되지 않음)이므로 .inputrc에서는 필요하지 않으며 의도한 것과 반대되는 작업을 수행합니다.

관련 정보