如何实现动态bash自动完成

And*_*eas 7 shell bash autocomplete

我制作了一个列出可用项目的脚本。您可以通过输入启动项目script start <project>

现在启用自动完成会很棒,所以如果您输入start Organ并按TAB,它会自动完成到start Organisation

困难的部分是项目列表是动态的。可用项目列表经常变化,所有用户都有不同的可用项目。

我的想法是将可用的项目保存到一个 json 文件中,并使用这个文件来启用自动完成。我知道我必须在 中创建一个文件/etc/bash_completion.d/,但我不知道如何实现取决于可用项目的“动态”自动完成。

nsg*_*nsg 11

假设您有一个名为output_projects列出所有可用项目的脚本。现在从 bash 函数调用它:

_list_projects() {
  ./output_projects
}
Run Code Online (Sandbox Code Playgroud)

现在将它绑定到start我们的示例中,如下所示:

complete -F __list_projects start
Run Code Online (Sandbox Code Playgroud)

基本上,每次按下<tab>bash 都会执行该函数并获得可用项目的新列表。

测试:

$ bash --version | head -1
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

那解决了你的问题吗?如果不是,请改写并澄清您在看什么。