我用来bind -x
在按下某个按键序列时执行脚本。
例如,我有一个/usr/local/bin/foo
包含内容的脚本
#!/bin/bash
echo foo
如果我运行bind -x '" ": /usr/local/bin/foo'
,那么每次按空格键两次它都会回显“foo”。到目前为止,一切都很好。
我想要做的是访问(并且最好修改)当前输入的命令。如果我输入some really long command
(末尾有两个空格)我的脚本将被执行,但它如何看到我已经输入some really long command
并将其更改为some other long command
?
答案1
基于这个答案,我认为你必须将你的脚本变成一个源bash函数,让它修改READLINE_LINE(并根据新的长度/所需的光标点修改READLINE_POINT),然后bind -x '" " : that-function-name'
.
只是为了澄清;如果你只想修改一些带有双空格的命令,执行如下操作:
autocomplete() {
if [ "$READLINE_LINE" = "some really long command" ]
then
READLINE_LINE="some other long command"
READLINE_POINT=23
fi
}
bind -x '" " : autocomplete'