所以我有一些我正在编写脚本的命令:
all-build.sh all-git.sh
这些运行命令在多个文件夹和产生输出窗口(在日志上运行tail -f)和各种其他东西。
但是我每个人都采用不同的命令,我希望标签完成
所以我读了一个关于制表符完成的教程,我有如下所示的all-completion.bash脚本:
#!/usr/bin/env bash
complete -W "param1 param2 param3" all-build.sh
complete -W "status log push pull" all-git.sh
正如你所看到的那样,所有构建的自动完成参数都是我自己的自定义参数,我很满意。然而,git是重复的一些实际的git参数。所以我真正想要的是:
complete <use git completion> all-git.sh
因此,当我执行all-git submodule upd<tab>
时,它会使用git的自动完成功能自动完成all-git submodule update
。
这可能吗?
答案 0 :(得分:4)
我们可能会使用_completion_loader
(用于动态定义完成 )以加载git
次完成。
然后我们可以在官方git-completion.sh文件中观察到,用于完成git“子模块”的函数称为_git
,因此我们可以通过{{1}将其传递给complete
}选项,请参阅complete documentation。
所以写一下
-F <function>
我们可以达到预期的行为(如果我正确地解决了您的问题)。
注意:source /usr/share/bash-completion/bash_completion
_completion_loader git
complete -F _git all-git.sh
脚本可能位于您计算机的不同文件夹中。我已经使用 bash 4.3.48 在 Ubuntu 16.04 上测试了它。
编辑:如果这不能完全解决您的问题,我相信这是您想要的方式:)。你几乎可以根据自己的需要改进解决方案。
EDIT-2 :我还假设您已经安装并运行了git完成。
EDIT-3 :我发现了一些有趣的链接,这些链接并没有解决您的特定问题,但可以提供一些更轻松,更深入的知识:
答案 1 :(得分:2)
这很简单:
source /usr/share/bash-completion/completions/git
__git_complete all-git.sh __git_main
__git_complete()
函数是创建Git补全的助手,它由Git本身使用,例如:__git_complete git __git_main
。您可以将其用于特定命令,例如__git_complete all-submodule.sh _git_submodule
。
它是专门为此设计的,因此无需使其更加复杂。