使用bind读取当前命令行

使用bind读取当前命令行

我用来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'

相关内容