![自定义 Batch Tab 补全](https://linux22.com/image/1277516/%E8%87%AA%E5%AE%9A%E4%B9%89%20Batch%20Tab%20%E8%A1%A5%E5%85%A8.png)
我有我的自定义控制台实用程序cooltool
及其选项列表
fooOption
barOption
我应该怎么做才能让 bash 通过按键自动完成选项tab
?
我的意思是用户输入
$ ./cooltool foo_
然后按下tab
。然后
$ ./cooltool fooOption _
出现了。
答案1
为 编写一个 bash 补全脚本cooltool
。bash 完成该软件包附带了许多流行程序的脚本,您可以将其用作示例。
答案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 complete
和man compgen
了解详情。
请查看以下精彩教程:编写自己的 Bash 补全函数
答案3
答案4
除了 dogbane 的答案之外,您还可以执行以下操作:
complete -W "fooOption barOption" cooltool
如果您只想从字符串开头匹配单词列表。看来 complete 和 compgen 共享大多数选项。我只注意到我使用的命令中的“字符串开头”匹配,因此我发现您可以在 _cooltool 函数中执行其他操作,例如:
COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )
匹配选项名称中的任何位置。