最初のbashシェルを起動すると、gitの完成は正常に動作します(git rest<TAB>
- > git restore
)。最初のシェル内で2番目のシェルを開くと、gitではタブ補完は機能しなくなりますが、通常のファイル補完は機能し続けます。
両方のシェルの出力はcompletion
同じです(ソート順を除く)。
$ echo $0
-bash
$ complete git
$ git rest<TAB> # <--- works
$ cd<TAB> # <--- works
$ bash
$ echo $0
bash
$ complete git
$ git rest<TAB> # <--- does NOT work
$ cd<TAB> # <--- works
何が間違っているのか、どうすればわかりますか?
ベストアンサー1
これは、サブシェルがログインシェルではないためです。あなたが投稿した出力では、最初のシェルはログインシェルであり(最初の文字が「-」なので)、サブシェルはログインシェルではないことがわかりました。
私のbashインストールには、/etc/profile
スクリプトソースの下にあるすべてのスクリプト/etc/profile.d/
が含まれています。ただし、bashは非ログインシェルを/etc/profile.d/bash_completion.sh
読みません。/etc/profile
ログインしていないサブシェル(のみ使用)を起動すると、bash
gitの完成は機能しませんが、それから. /etc/profile.d/bash_completion.sh
動作を開始することを確認しました。
より一般的な解決策は、実行サブシェルをログインシェルとして使用することですbash --login
。