可以通过编程方式调用bash完成吗?

jpk*_*tta 13 api bash bash-completion

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

. /etc/bash_completion
generate_completions "command arg1 arg2" 17
Run Code Online (Sandbox Code Playgroud)

将返回相同的东西

command arg1 arg2[TAB]
Run Code Online (Sandbox Code Playgroud)

我没有看到任何方法这样做.

Foo*_*Bah 8

我实际上必须这样做才能弄清楚apt-get autocomplete如何在ubuntu上运行(构建我自己的伪存储库工具:)

这是一个多步骤的过程:

首先,complete -p将以一组命令的形式为您提供所有完成的列表,您可以运行这些命令来复制配置.例如,假设您想要查找自动完成功能apt-get.然后:

$ complete -p | grep apt-get
complete -F _apt_get apt-get
Run Code Online (Sandbox Code Playgroud)

这告诉您shell函数_apt_get由完成机制调用.

你需要重新创建函数使用的特殊变量,即COMP_LINE(整行),COMP_WORDS(所有参数的bash数组 - 基本上是拆分COMP_LINE),COMP_CWORD(索引,应该指向最后一个值),COMP_POINT(在你正在进行自动完成的单词中,以及COMP_TYPE(这就是你告诉它你想要完成的方式,就像你点击标签一样).

注意:阅读联机帮助页以获取更多信息 - 这就是我首先想到的. man bash