Bashに特定のコマンドのオートコンプリート定義を表示させるにはどうすればよいですか?

Bashに特定のコマンドのオートコンプリート定義を表示させるにはどうすればよいですか?

私の環境では、コマンドを使用してmodule項目をロードおよびアンロードしますが、私が使用している一部のシステムには正しいオートコンプリート機能があり、他のシステムにはありません。

完成した本がどこから来たのかわかり、他の場所に設置できるのか気になります。

答え1

組み込みコマンドを使用して、コマンドの完了コードを表示できますcomplete。例は次のとおりです。

$ complete -p ls
complete -F _longopt ls

その機能に興味がある場合は、組み込み関数を_longopt使用できます。type

$ type -a _longopt
_longopt is a function
_longopt () 
{ 
    local cur prev words cword split;
    _init_completion -s || return;
    case "${prev,,}" in 
        --help | --usage | --version)
   ----- snip ------

機能であれば、HairOfTheDogが指摘したソリューションを使用できます。ここ:

# Turn on extended shell debugging
shopt -s extdebug

# Dump the function's name, line number and fully qualified source file  
declare -F _longopt

# Turn off extended shell debugging
shopt -u extdebug

Bashは、初期化中に環境変数または関数が定義されている場所を確認できません。 それ以外の場合は、bashが実行しているコンテンツに関する情報を取得できます-x

bash -x -i -l

これにより、デバッグモードで対話型ログインシェルが実行され、実行されたすべての行が表示されます。出力で関数定義が見つかった場合は、その定義の前のsource最後またはコマンドを見つけることができます。.

関連情報