サブシェルでgitが機能しないbash完了の問題を解決する方法

サブシェルでgitが機能しないbash完了の問題を解決する方法

最初の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ログインしていないサブシェル(のみ使用)を起動すると、bashgitの完成は機能しませんが、それから. /etc/profile.d/bash_completion.sh動作を開始することを確認しました。

より一般的な解決策は、実行サブシェルをログインシェルとして使用することですbash --login

おすすめ記事