하위 쉘에서 git이 작동하지 않는 bash 완료 문제를 해결하는 방법

하위 쉘에서 git이 작동하지 않는 bash 완료 문제를 해결하는 방법

첫 번째 bash 쉘을 시작하면 git 완성이 제대로 작동합니다( git rest<TAB>-> git restore). 첫 번째 셸 내에서 두 번째 셸을 열면 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.

관련 정보