我想要的是一个我可以从程序中调用的函数,因此它完成了 bash 给出命令行和按下 TAB 的位置的方式。
. /etc/bash_completion
generate_completions "command arg1 arg2" 17
将返回相同的东西
command arg1 arg2[TAB]
我还没有看到任何方法可以做到这一点。
我想要的是一个我可以从程序中调用的函数,因此它完成了 bash 给出命令行和按下 TAB 的位置的方式。
. /etc/bash_completion
generate_completions "command arg1 arg2" 17
将返回相同的东西
command arg1 arg2[TAB]
我还没有看到任何方法可以做到这一点。
实际上,我必须这样做才能弄清楚 apt-get 自动完成功能在 ubuntu 上的工作原理(构建了我自己的伪存储库工具 :)
这是一个多步骤的过程:
首先,complete -p
将以一组命令的形式为您提供所有完成的列表,您可以运行这些命令来复制配置。例如,假设您想搜索apt-get
. 然后:
$ complete -p | grep apt-get
complete -F _apt_get apt-get
这告诉您,完成机制调用了 shell 函数 _apt_get。
您需要重新创建函数使用的特殊变量,即 COMP_LINE(整行)、COMP_WORDS(所有参数的 bash 数组——基本上拆分 COMP_LINE)、COMP_CWORD(索引,应指向最后一个值)、COMP_POINT(在单词中您正在执行自动完成的位置)和 COMP_TYPE(这是您告诉它您想要完成的方式,就像您点击选项卡一样)。
注意:阅读手册页以获取更多信息——这是我首先想到的。 man bash