bash shell .inputrc表现得很奇怪

时间:2014-07-16 16:24:21

标签: bash

我最近不得不从tcsh切换到bash shell。为了在bash shell上使用tcsh的ESC + p和set complete=enhance,我在我的bash shell的.inputrc文件中添加了以下三个命令:

bind 'set completion-ignore-case on'

bind  '""\ep": history-search-backward'

bind  '"\en": history-search-forward'

之后我发起了.inputrc,我得到了这些命令的预期行为。但我注意到一个奇怪的问题,如果我输入' b'在我的命令提示符下,它被转换为\en": history-search-forward'

然后我在.inputrc中注释掉了最后两个命令并再次获取了该命令。然后再次出现同样的问题,这次' b'正在转换为'设置完成 - 忽略 - 案例'。如果我在.inputrc和源代码中注释掉所有三个命令,那么' b'正在打字。

我唯一理解的是,无论最后一个绑定命令附加到什么,' b'只是转向那个。

请帮助我,我对如何摆脱这个问题毫无头绪。

另请注意,如果我删除' bind'并简单地编写如下命令然后它说我找到时找不到bash shell命令:

set completion-ignore-case on

""\ep": history-search-backward

"\en": history-search-forward

感谢。

西蒙

1 个答案:

答案 0 :(得分:2)

.inputrc文件不是shell脚本。你没有通过shell运行它(这意味着你不能在其上使用.source。)

我相信,在inputrc文件中(比如默认的.inputrc)你的后者(bind - 更少)版本是正确的,你应该只允许bash / readline加载该文件为你自动在shell init(或使用 Cx Cr 告诉readline重新读取inputrc文件)。

话虽如此,除非加倍的引号,我相信这些原始行应该在通过bash获取/运行时正常工作(尽管不在.inputrc文件中)。