怎么用!!作为我的 .inputrc 键盘绑定的一部分?

How can I use !! as part of my .inputrc keyboard binding?

在 Bash 中,我想在我的 .inputrc 中创建一个绑定,它利用内置的 !! 来重复最后一个命令。但这似乎没有正确扩展 !!

bind -x '"\C-t": echo $(!!)'

当我调用上面的绑定时 (Ctrl+t) 我只得到这个:

-bash: !!: command not found

同样越简单

 bind -x '"\C-t": echo !!'

只是产量

!!

而不是实际的命令。 显然我的真实用例比这个例子更实质,这只是问题的说明。

编辑:

此问题与 echo "#!" fails -- "event not found" 无关,据称我的问题与该问题重复。由于引用问题或缺乏历史记录,该问题与 !* 在常规 bash 中扩展的普遍失败有关。另一方面,我的问题非常特定于在 .inputrc 文件(或别名)中使用的上下文,其中一组不同的因素起作用。在我的常规命令行中,所谓的 "bang expansions" 一直运行良好。只是在这些特殊的情况下才会出现问题,才会出现这个问题。

"\C-t": "fc -s\n"

fc -s重新执行上一条命令,fc也是内置的:

$ type fc
fc is a shell builtin

好吧,shell 引用似乎有些奇怪。

这行不通

bind -x '"\C-l": "!! \n"'

但是把它放在 .inputrc 中确实

"\C-l": "!! \n"

不太明白为什么前者不行,但至少后者可以。

编辑:好的,知道了。显然,在 cmd 行上定义时不需要“-x”。所以我们可以简单地写

bind '"\C-l": "!! \n"'

使用 -x 告诉 bind 不要干扰你已经输入的内容(几乎就像模态 window 的原始 ncurses 近似!)这不是我想要的。感谢在 In bash, how do I bind a function key to a command? 上接受的回答以获得此见解!