19

我想要的是一个我可以从程序中调用的函数,因此它完成了 bash 给出命令行和按下 TAB 的位置的方式。

. /etc/bash_completion
generate_completions "command arg1 arg2" 17

将返回相同的东西

command arg1 arg2[TAB]

我还没有看到任何方法可以做到这一点。

4

1 回答 1

12

实际上,我必须这样做才能弄清楚 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

于 2011-07-19T02:56:42.050 回答