터미널이 올바르게 포장되지 않음 [닫기]

터미널이 올바르게 포장되지 않음 [닫기]

SSH를 통해 내 서버에 연결하기 위해 Gnome Terminal을 사용하고 있습니다. 원격 서버(Ubuntu)의 내 계정은 bash를 사용합니다. 내 bashrc에는 현재 git 분기를 포함하도록 쉘 프롬프트를 설정하는 행이 포함되어 있습니다(해당되는 경우).

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h: \[\033[32m\]\w\[\033[00m\]\$(parse_git_branch)\$ "

git 저장소에 들어가면 터미널이 올바르게 패키징을 중지합니다. 긴 명령은 시작하는 줄의 시작 부분으로 줄 바꿈하는 대신 두 번째 줄로 줄 바꿈하여 프롬프트 위에 인쇄를 시작해야 합니다.

내 작업 디렉토리가 git 저장소 내부에 있지 않는 한(즉, 출력이 비어 있지 않은 경우) parse_git_branch패키징에 문제가 없습니다 .

인쇄할 수 없는 문자에 대해 알고 있습니다.에 포함되어야 \[하며\]이런 식으로 쉘(또는 터미널?)은 프롬프트 길이에 대해 계산하지 않는다는 것을 알고 있습니다. "내보내기" 줄이 이 작업을 올바르게 수행하고 있다고 확신합니다. 하지만 내 regex-fu는 sed 명령이 수행하는 작업을 이해할 만큼 강력하지 않으며 인쇄할 수 없는 문자를 삽입하는 것 같지 않습니다. 바르게.

이 문제매우 유사합니다(동일한 parse_git_branch기능을 사용하더라도여기) 그러나 또 다른 문제는 프롬프트에 이모티콘이 있는 것과 관련이 있는데 제 경우에는 그렇지 않습니다.

내 메시지에 어떤 문제가 있는지 아는 사람 있나요?

답변1

color=always이는 쉘 프롬프트나 기능 때문이 아니라 git에서 ui 옵션을 활성화했기 때문인 것으로 나타났습니다 parse_git_branch. "git Branch" 명령이 색상과 함께 나타나는데, parse_git_branch함수의 원 작성자는 이를 고려하지 않고 대신 색상 코드가 제대로 꺼지지 않도록 문자열을 잘랐습니다.

--no-color함수 내부의 "git Branch" 명령에 플래그를 추가하는 것만으로 parse_git_branch도 문제를 해결하기에 충분했지만 실제로는 색상에 익숙하므로 금색 배경을 복제하는 방법은 다음과 같습니다.

parse_git_branch() {
     git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h: \[\033[32m\]\w\[\033[00m\]\[\033[7m\033[33m\]\$(parse_git_branch)\[\033[00m\]$     "

답변2

git 패키지를 설치하면 분기 확인 기능이 내장되어 가져올 수 있는 로컬 파일을 설치해야 합니다. 사용해 보셨나요? 나는 이것을 사용하는 데 아무런 문제가 없습니다. 이는 RHEL에서 가져온 것이므로 git-prompt.sh는 우분투의 다른 위치에 있을 수 있습니다. 그냥 "git-prompt.sh 찾기"를 수행하세요. 그렇지 않으면 여기에 버전이 있는 것 같습니다.https://github.com/magicmonty/bash-git-prompt

. /usr/share/git-core/contrib/completion/git-prompt.sh
export PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '

관련 정보