特定のbash完了ファイルは/usr/share/bash-completion/completionsでは機能しませんが、/etc/bash_completion.dではうまく機能します。

特定のbash完了ファイルは/usr/share/bash-completion/completionsでは機能しませんが、/etc/bash_completion.dではうまく機能します。

"install"を使用してインストールされた関連のmanファイルとbash完了ファイルと一緒にいくつかの静的にリンクされたバイナリを保持するgitリポジトリがあります。GNUストーシンボリックリンクを作成します。

以前は問題なくbash完了ファイルにシンボリックリンクを入れましたが、最近はバイナリが入り、manファイルもそこにあるのでシンボリックリンクがより正確な場所だと思っていたので、シンボリックリンクを入れ始めまし/etc/bash_completion.dた。/usr/share/bash-completion/completions/usr/local/bin/usr/local/share/man

この新しい場所に配置すると、機能しなくなった4つの特定のbash完了ファイルを除いて、すべてが以前と同じように機能します。これらはすべて:

fzfについてのこの2つ:

うまく動作する他のbash完了ファイルが20個あります。ではうまくいきます/etc/bash_completion.dが、うまくいかない特定のbash完了ファイルの特徴は何ですか/usr/share/bash-completion/completions

編集する:~/.local/share/bash-completion/completionsそれらはどれでも機能しません。


追加情報:

このファイルは標準のDebian / Ubuntuの.bashrc範囲に由来しています。

# Enable programmable completion features
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

どちらの場所でも、ソースはディレクトリの内容ではなく、次の2つのファイルです。

/usr/share/bash-completion/bash_completion

/etc/bash_completion

それ以外の場合、2番目のファイルは単に最初のファイルを指しますshopt -oq posix。私の設定では:

$ if ! shopt -oq posix; then echo "not posix"; fi
not posix

私の考えでは、答えはこうなるべきだと思います。/usr/share/bash-completion/bash_completion


もっと:

bash_completion最新バージョンに変更してみましたが、やはり役に立ちませんでした。

https://github.com/scop/bash-completion

返品..

これらのファイルをどこに配置しても効果はありません~/.local/share/bash-completion/completions

答え1

以前のバージョンとの互換性のために、/etc/bash_completion.d完成ファイルは常にすぐにインポートされます。一方、ディレクトリはその中にあるスクリプトを遅く取得します。つまり、そのコマンドの完了が要求されるまで、特定の完了ファイルはインポートされませんbash_completioncompletionsソースファイルは名前で決定されるため、完成したいコマンドと名前は同じでなければなりません。たとえば、tmux.completion.bashシンボリックリンクはでなければcompletions/tmuxなりませんcompletions/tmux.completion.bash

最後に、他のすべての項目を下に置くときに/usr/local完成スクリプトをここに配置することもできます/usr/local/share/bash-completion/completions

関連情報