git-completion如何调用与您键入的命令相关的功能?

时间:2015-04-29 04:06:51

标签: bash bash-completion git-completion

我试图查看git-completion.bash的代码。如果运行此文件,则可以自动完成git命令参数。我想写一个非常相似的工具,但是对于另一个命令(即:不是git)。我试图弄清楚它是如何工作的,所以我可以复制/修改它。我有一个很好的理解:

键入_git_rebase时会调用git rebase <something><TAB>等函数。我无法弄清楚的是如何调用_git_rebase我无法在代码中的任何位置找到该函数。我认为可能有事要做with this function,但我不确定。

任何更熟悉bash的人都可以向我解释这里发生了什么以及如何调用_git_rebase?为方便起见,这里是源代码:https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

1 个答案:

答案 0 :(得分:2)

这些函数由bash自动调用,具体取决于命令行中当前输入的命令。

您可以查看bash的文档:

简单示例:

$ cat compspec.foo
function _foo
{
    local cmd=$1 cur=$2 pre=$3

    if [[ $pre == "$cmd" ]]; then
        COMPREPLY=( $(compgen -W 'hello world' -- "$cur") )
    fi
}

complete -F _foo foo
$ source compspec.foo
$ foo <TAB><TAB>
hello  world
$ foo h<TAB>
$ foo hello