bash shell .inputrc 行为异常

标签 bash

我最近不得不从 tcsh 切换到 bash shell。为了在 bash shell 上使用 tcsh 的 ESC+p 和 setcomplete=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 和 source 中的所有三个命令,那么“b”就会正确输入。

我从中唯一了解到的是,无论最后一个绑定(bind)命令附加到什么,'b' 只是切换到那个。

请帮助我,我不知道如何摆脱这个问题。

另请注意,如果我删除“bind”并简单地编写如下命令,那么当我获取它时,它会说 bash shell 命令未找到:

set completion-ignore-case on

""\ep": history-search-backward

"\en": history-search-forward

谢谢。

西蒙

最佳答案

.inputrc 文件不是 shell 脚本。您不通过 shell 运行它(这意味着您不使用 .source )。

我相信,在 inputrc 文件(如默认的 .inputrc)中,您的后一个(bind-less)版本是正确的,您应该简单地允许bash/readline 在 shell init 时自动加载该文件(或使用 C-x C-r 告诉 readline 实时重新读取 inputrc 文件)。

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

关于bash shell .inputrc 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24785904/

相关文章:

linux - 使用 bash 脚本将文本转换为时间格式

bash - 结果中出现重复的 id 并带有一些空值

regex - 为 Jenkins 作业解析 Bash 中的 Karma 覆盖率输出(脚本)

regex - 如何按特定列对格式进行排序?

perl - 如何将我的 Bash 循环变量传递给 Perl 解释器?

linux - 此 bash/shell 练习需要帮助

bash - 如何在不实际更改到该目录的情况下从特定目录执行命令

mysql - bash 脚本中的未知选项 '--print-defaults'

PHP 更改缓慢以在浏览器中刷新

bash - 使用 sed/awk 插入文本中线