Bash 将国际字符显示为转义序列

Bash 将国际字符显示为转义序列

当我在 bash 命令行中按某些键(例如德语变音符号)时,我会得到转义序列。例如,ß给我\303.这些转义序列被视为单个字符,因此一个退格键会删除整个序列。该字符只是在命令行上显示错误,但它被正确解释,例如键入echo ß给出:

$ echo \303
ß

我猜它对非 7 位 ASCII 字符有问题。然而,在其他所有地方,这些都工作得很好。我可以在 vim 中使用它们或用 cat 显示它们,并且 unicode 字符也可以正常工作。

如何让 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

你可以感谢一个叫利诺·米格尔·马丁斯·蒂诺科的人从 2004 年开始。

GNU Readline 文档.inputrc不允许内嵌评论。它和GNU Bourne Again shell 手册说:

以“#”开头的行是注释。

线路

set output-meta on # 启用具有第八位设置的元输出
不是以 . 开头的一行#。这是一条#中间有 a 的线。正如 Lino Miguel Martins Tinoco 发现的那样,这会导致该选项关闭而不是打开,正如xe 运行它时output-meta的输出所示:bind -V

输出元设置为“关闭”

.inputrc不是shell 脚本。正如中所述Linux 从头开始​​教程

请注意,注释不能与命令在同一行。

答案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 中是不必要的,并且它们的作用与预期相反。

相关内容