bash の補完スクリプト(bash-completion)ファイルってどこに配置すればいいの?


備忘録としてメモ。

🍰結論

自作またはダウンロードした補完スクリプトは次のうちどちらかのディレクトリに配置すればいい。

ユーザーごとの適用

~/.local/share/bash-completion/completions/

システム全体で適用

/usr/local/share/bash-completion/completions/

パッケージの場合

パッケージで補完スクリプトを管理する場合は pkg-config --variable=completionsdir bash-completion で表示されるディレクトリに配置する。

pkg-config --variable=completionsdir bash-completion
/usr/share/bash-completion/completions
ファイル名について
補完スクリプトのファイル名は <コマンド名> もしくは <コマンド名>.bash とする。

🔍ソースを確認してみた

bash_completion (v2.11) のソースを確認してみると、bash_completion ファイルの __load_completion() 関数で補完スクリプトファイルを読み込んでいるっぽい。

上記の関数内において補完スクリプトが探索されるディレクトリは次の2種類。

Example 1. 読み込み先ディレクトリ
${BASH_COMPLETION_USER_DIR}/completions

デフォルト値は $HOME/.local/share/bash-completion/completions となる。

変数のデフォルト値について補足

$BASH_COMPLETION_USER_DIR$XDG_DATA_HOME/bash-completion,
$XDG_DATA_HOME$HOME/.local/share


${XDG_DATA_DIRS}/bash-completion/completions

デフォルト値は

  • /usr/local/share/bash-completion/completions

  • /usr/share/bash-completion/completions

の2つのディレクトリ。

変数のデフォルト値について補足
$XDG_DATA_DIRS/usr/local/share:/usr/share
それぞれ for 文で登録される。

以上より、上記ディレクトリのいずれかに補完スクリプトを配置すれば読み込まれる。