![하위 쉘에서 git이 작동하지 않는 bash 완료 문제를 해결하는 방법](https://linux55.com/image/223924/%ED%95%98%EC%9C%84%20%EC%89%98%EC%97%90%EC%84%9C%20git%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20bash%20%EC%99%84%EB%A3%8C%20%EB%AC%B8%EC%A0%9C%EB%A5%BC%20%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
첫 번째 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
.