첫 번째 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
로그인하지 않은 서브셸(만 사용)을 시작하면 bash
git 완성이 작동하지 않지만 그런 다음 . /etc/profile.d/bash_completion.sh
작동을 시작한다는 것을 확인했습니다.
보다 일반적인 해결책은 실행 하위 쉘을 로그인 쉘로 사용하는 것입니다 bash --login
.