나는 bash를 실행 중입니다.
GNU bash, 버전 4.3.25(1)-릴리스(x86_64-apple-darwin13.4.0)
OS X 10.10.1에서. 약 일주일 전에 자동 완성 기능이 작동을 멈췄지만 git에서만 작동하는 것을 발견했습니다. Git 자동 완성에 이 스크립트를 사용합니다.
https://github.com/git/git/blob/master/contrib/completion/git-completion.bash
작동이 중지된 지 며칠이 지나도 문자 's'로 시작하는 명령(예: status, show, stash)에 대해 자동 완성 기능이 계속 작동하는 것을 확인했습니다. 그런 다음 이 명령을 자동 완성하려고 합니다.
git c
출력은 다음과 같습니다.
사용자:~$ git c^[[m^[[K
c^[[m^[[Kat 파일
c^[[m^[[Kheck-attr
c^[[m^[[Kheck-무시
c^[[m^[[Kheck-mailmap
c^[[m^] [[Kheck-ref-format
c^[[m^[[Kheckout
c^[[m^[[Kheckout-index
c^[[m^[[Kherry
c^[[m^[[Kherry-pick
c^[ ]] [m^[[Kitool
c^[[m^[[Klean
c^[[m^[[클론
c^[[m^[[Kolumn c^[[m^[[Kommit c^[[m^) [[Kolone
c^[[m^[[Kolumn c^
[[m^[[Kommit c^[[m^[[] Kommit-tree
c^[[m^[[Konfig
c^[[m^[] Kount-객체
c^[[m^[[Kredential
c^[[m^[[Kredential-cache
c^[[m^[] [Kredential-osxkeychain
c^[[m^[[Kredential-store
c^[[ m^[[Kvsexportcommit
c^[[m^[[Kvsimport
c^[[m^[[Kvsserver]
보시다시피, 일부 이상한(이스케이프 처리된?) 문자가 각 명령의 첫 번째 문자 뒤에 삽입됩니다("s"를 제외한 다른 모든 문자에서도 동일한 현상이 발생함). 이러한 문자로 인해 자동 완성 기능이 예상대로 작동하지 않습니다.
이 문제의 원인을 아는 사람이 있습니까? 나는 이것을 디버깅하는 방법조차 모르므로 어떤 조언이라도 환영합니다.
답변1
이 이상한 이스케이프 시퀀스는 색상 변경 명령입니다.
코드를 완료하려면 다음 명령을 실행하여 사용 가능한 명령을 나열하십시오.
git help -a|egrep '^ [a-zA-Z0-9]'
출력은 git help -a
다음과 같습니다.
grep 추가 원격 추가 --대화형 해시 개체 원격 -ext am 도움말 원격 -fd... fsck -개체 수신 패킷 쓰기 트리 gc reflog get-tar-commit-id relink
grep이 해당 줄의 일치하는 부분을 컬러로 인쇄하도록 구성된 경우 첫 번째 열의 명령 이름에는 첫 번째 문자가 강조 표시됩니다.
$ git help -a|egrep --color=always '^ [a-zA-Z0-9]' | cat -v | head -n 1
^[[01;31m^[[K a^[[m^[[Kdd grep remote
Bash는 이 출력을 보면 ^[[01;31m^[[K
, a^[[m^[[Kdd
및 grep
가 remote
가능한 명령이라고 생각합니다. 첫 번째는 나타나지 않으며, 마지막 두 개는 정확하고 두 번째는 깨졌습니다.
구성해야합니다grep출력이 터미널에 없을 때는 색상을 사용하지 마십시오. 이미 별칭을 사용하고 있는 경우 egrep
( egrep --color=always
및 grep
과 동일 fgrep
) 별칭을 로 변경합니다 --color=auto
. GREP_OPTIONS
어딘가에 변수가 설정 되어 있으면 그곳에서 --color=always
변경 하세요 --color=auto
.