bash readline:执行外部命令的键绑定

Kei*_*son 9 bash tcsh readline

(背景:我是 tcsh 的长期用户,逐渐过渡到 bash,并试图找到一些有用的 tcsh 特定功能的等效项。)

在 tcsh 中,我可以定义一个执行外部命令的键绑定。例如,给定:

bindkey -c ^Gu uptime
Run Code Online (Sandbox Code Playgroud)

我可以在 tcsh 中输入“Control-G u”,它就会执行uptime命令。我不必输入 Enter,该命令不会出现在我的历史记录中,我可以在输入行的中间输入(我发现后者对某些命令特别有用)。

bash 通过 GNU readline 库具有类似的键绑定机制,绑定在$HOME/.inputrc(或其他地方)中指定。但是在阅读info readline文档后,我没有看到通过键绑定来执行外部命令的方法。

我想出的最接近的事情是将这样的内容添加到我的.inputrc文件中:

"\C-gu": "uptime\n"
Run Code Online (Sandbox Code Playgroud)

但这不会执行命令;相反,它的作用就像我输入uptime后按 Enter 键一样。该命令出现在我的历史记录中(没关系),它仅在空行上起作用;如果我输入"echo control-Gu",那么它会打印uptime而不是执行命令。

另一个小缺点是绑定会影响其他使用 GNU readline 的命令,例如 Perl 调试器。

有没有办法bindkey -c通过将键序列映射到指定外部命令的执行来模拟 tcsh在 bash 中的效果?

如果重要的话,我在 Ubuntu 12.04 beta 2 上使用 bash 4.2.24。

gee*_*aur 11

并非所有bash行编辑都由~/.inputrc; 其中大部分是通过bind内置配置的。在这种情况下,您需要类似的东西

bind -x '"\C-gu":uptime'
Run Code Online (Sandbox Code Playgroud)

在您的~/.bashrc.