web-dev-qa-db-ja.com

TABオートコンプリートはどのようにして補完オプションを見つけますか?

また、エイリアスをオートコンプリートする方法は?

34
theTuxRacer

コマンドに応じて:

  • 誰かが、オプションを含む引数の可能な補完を生成する関数を書いた可能性があります。一部のコマンドの関数は/etc/bash_completion.d/*(または一部のシステムでは別の場所)にあります。これらの関数は completebuilt-in を使用して登録されます(たとえば、complete -F _find findは、押すと_find関数を呼び出すようにbashに指示します Tabfindコマンドで)。 compgen ビルトインを使用して、bashに「完了可能な候補はここにある」と伝えます。
  • 一部のコマンドでは、bashは引数--helpを指定してコマンドを呼び出し、出力を解析します。そのようなコマンドは complete ビルトインで登録できます。 complete -F _longopt ls_longoptは、実際には完了生成関数であり、固定リストを使用するのではなく、コマンドの出力を解析します。 (コマンドの出力を解析して可能な補完を生成する、より専門的な補完関数が他にもあります。例については/etc/bash_completion.d/*を参照してください。)
  • エイリアスなどについては、補完機能がbashの内部テーブルでそれらを検索します。 complete 組み込みには、そのためのオプションがあります。エイリアスの場合は-A

ファイルを見てください

/ etc/bash_completion

そしてディレクトリからファイルを観察します:

/etc/bash_completion.d

あなたが答えを見つけるでしょう。

10
SHW

DebianおよびUbuntuでは、bash補完のサポートが bash補完パッケージ によって提供されます。また、bash完了ファイルをソースするには、通常、/etc/bash.bashrcまたは.bashrcで次のコメントを解除する必要があります。以下は/etc/bash.bashrcからのものです。

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

これが機能するために。私は通常両方でそれをコメント解除します。 Debianでのインタラクティブ/ログインシェルの処理は少し混乱しています。

同様のコメントはおそらく他のディストリビューションにも当てはまりますが、デフォルトでソーシングが可能になるかもしれません。

2
Faheem Mitha