自定义bash标签完成


34

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

fooOption
barOption

要使bash能够通过按键自动完成选项,该tab怎么办?

我的意思是用户输入

$ ./cooltool foo_

然后按tab。然后

$ ./cooltool fooOption _

出现了。


1
不要交叉张贴。
Wuffers 2011年

2
请注意,这一个已迁移,而另一个未迁移。我认为许多用户仍然没有意识到他们不应该在多个SE网站上发布问题。它们通常用于分散的论坛(不是统一系统),您可能会在几个不同的论坛中要求更好的机会快速回答问题。
jcrawfordor 2011年

Answers:


2

为编写一个bash完成脚本cooltool。该庆典完成包附带了许多受欢迎的节目,你可以作为例子使用的脚本。


40

最简单的方法是将以下内容添加到您的.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完成函数


7

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

您还应该阅读此介绍。简介的第二部分是您需要的那一部分。


1
我使用的是Mac OS X 10.6,所以没有/etc/bash_completion.d目录

好的,很高兴知道。


2

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

complete -W "fooOption barOption" cooltool

如果您只是想匹配字符串开头的单词列表。似乎complete和compgen具有大多数选择。我在使用的命令中只注意到“字符串开头”匹配,因此,我发现可以在_cooltool函数中执行其他操作很整洁,例如:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.