inputrc文件导致的终端粘贴异常

问题描述:
我在 .bashrc 文件设置了 export INPUTRC=~/.config/.inputrc ,结果导致了我向终端粘贴时,终端显示异常

原因分析:
经过排查,发现只有在我粘贴带中文字符的内容时,才会发生异常行为。而且,如果注释掉 INPUTRC 变量,即使粘贴带有中文字符也是正常的。所以我怀疑是我设置的 INPUTRC 变量指示的文件覆盖了原有的全局设置。经查阅相关文档,发现确实该变量覆盖了 /etc/inputrc 文件中的设置。

解决:
readline文档表示,如果存在 ~/.inputrc 文件,或者 INPUTRC 变量,那么 /etc/inputrc 文件中的内容将被覆盖。所以我这里直接执行 cat /etc/inputrc >> ~/.config/inputrc 将 /etc/inputrc 文件中的内容追加到 INPUTRC 指示的文件中即可。


或者更好的方式是使用 bind 命令,在 ~/.bashrc 文件中设置 bind -f ~/.config/.inputrc 不仅 ~/.config/.inputrc 文件中的设置会生效,而且也不会覆盖 /etc/inputrc 文件中的设置。


更进一步,我最终定位到粘贴中文字符异常主要是以下变量的值未设置,而 /etc/inputrc 文件中对这些变量进行了设定,INPUTRC 变量指定的文件覆盖了此文件中的设置,所以这些变量的值失效了。

set meta-flag on # 允许从终端输入中文,否则的话终端会过滤掉每个字节的最高位;
set input-meta on # 允许向终端直接输入中文
set convert-meta off # 设置不将中文字符转化为转义序列,因为中文是两个字节表示的,第一字节的最高位是1开头的,可以能同于某个转义字符;
set output-meta on # 允许向终端直接输出中文

参考文献:
/etc/inputrc 详解

你可能感兴趣的:(readline,bash,readline,inputrc)