web-dev-qa-db-ja.com

bashでのパス補完が常に機能するとは限らないのはなぜですか?

さまざまなbash環境(さまざまなインストール)で、ヒットしたときのパス補完に関して異なる動作があります TAB コマンドラインで。これはどこで処理されますか?

具体的な例:

cmake-D-引数で実行します:

cmake -DCMAKE_TOOLCHAIN_FILE=~/x-too<TAB>

それは何もしません。一方、=~の間のスペースに注意してください

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-too<TAB> 

に完了します

cmake -DCMAKE_TOOLCHAIN_FILE= ~/x-tools

他のシステムでは、=と〜の間にスペースがなくても機能します。

関連する構成ファイルと値はどこにありますか?

7
Patrick B.

Linuxの自動補完はcompleteで機能します。

 ]➬complete -p  cmake
 complete -F _cmake cmake

_cmakeが担当します。

]➬type _cmake > cmake.sh

そして今、それを見て/デバッグしてください。たとえば_cmake_mineで変更し、それをテストするために呼び出します。

. cmake.sh
complete -F _cmake_mine cmake

any builtin bashコマンドのヘルプを取得するには:

 help complete
 help [[
 help for
4
more2000

/etc/profileで始める必要があります。他のファイルのソースを確認します(おそらく.コマンドを使用)。

たとえば、私のUbuntuシステムでは、

  • /etc/profileはすべての* .shファイルを/etc/profile.d/にソースします
  • /etc/profile.d/bash_completion.shソース/usr/share/bash-completion/bash_completion
  • そのファイル:
    • /usr/share/bash-completion/completions/を検索する補完ローダー関数を設定します
    • とソース~/.bash_completion

さまざまなシステムでそのパスをたどる必要があります。おそらく、そのうちの1つの/ usr/share/bash-completion/completions /にcmakeファイルがありません。

3
glenn jackman