我想要的是一个我可以从程序中调用的函数,这样就完成了bash给出命令行和按下TAB的位置的方式。
. /etc/bash_completion
generate_completions "command arg1 arg2" 17
将返回与
相同的内容command arg1 arg2[TAB]
我没有看到任何方法这样做。
答案 0 :(得分:8)
我实际上必须这样做才能弄清楚apt-get autocomplete如何在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