自定义 Batch Tab 补全

自定义 Batch Tab 补全

我有我的自定义控制台实用程序cooltool及其选项列表

fooOption
barOption

我应该怎么做才能让 bash 通过按键自动完成选项tab

我的意思是用户输入

$ ./cooltool foo_

然后按下tab。然后

$ ./cooltool fooOption _

出现了。

答案1

为 编写一个 bash 补全脚本cooltoolbash 完成该软件包附带了许多流行程序的脚本,您可以将其用作示例。

答案2

最简单的方法是将以下内容添加到您的 .bashrc。

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

每当您输入 时cooltool f[TAB][TAB],都会调用该_cooltool()函数。它将找出您当前的部分单词是什么,然后compgen找出哪些选项匹配。这些都存储在名为 的数组中COMPREPLY,然后显示出来。查看man completeman compgen了解详情。

请查看以下精彩教程:编写自己的 Bash 补全函数

答案3

您可能需要仔细查看系统上的 /etc/bash_completion.d 目录。

你也应该阅读本介绍。 这第二部分介绍就是你需要的。

答案4

除了 dogbane 的答案之外,您还可以执行以下操作:

complete -W "fooOption barOption" cooltool

如果您只想从字符串开头匹配单词列表。看来 complete 和 compgen 共享大多数选项。我只注意到我使用的命令中的“字符串开头”匹配,因此我发现您可以在 _cooltool 函数中执行其他操作,例如:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

匹配选项名称中的任何位置。

相关内容