1

のコードを見てみますgit-completion.bash。このファイルを実行すると、git コマンドの引数をオートコンプリートできます。非常によく似たツールを書きたいのですが、別のコマンド(つまり、gitではない)用です。コピー/変更できるように、これがどのように機能するかを理解しようとしています。私はまともな理解を持っています:

_git_rebase入力すると呼び出されるような関数がありますgit rebase <something><TAB>。私が理解できないことは、どのよう_git_rebaseに呼び出されるのですか? コードのどこでもその関数が使用されていることがわかりません。この機能と何か関係があるのではないかと思いますが、よくわかりません。

_git_rebaseここで何が起こっているのか、たとえばどのように呼び出されるのか、bash に詳しい人が説明してくれませんか? 便宜上、ソース コードを次に示します: https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

4

1 に答える 1

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
于 2015-04-29T08:55:26.840 に答える