PS1의 여러 줄 명령이 엉망입니다

PS1의 여러 줄 명령이 엉망입니다
declare __host='\[\e[30;102m\] \h \[\e[0m\]';
declare __dir='\[\e[1;97;44m\] \w \[\e[22m\]';
declare __arrow='\[\e[1m\]▸ \[\e[0m\]';

function __git_status() {
  local info;
  info=$(__git_info) && printf '\e[30;43m%s' "$info";
}

PS1="$__host$__dir"'$(__git_status)'"$__arrow ";

여러 줄 명령을 실행하면 시작 줄로 돌아갑니다. 나는 이것이 내 PS1의 탈옥과 관련이 있다고 확신합니다. 나는 내가 생각할 수 있는 거의 모든 것을 시도했지만 결국 아무것도 얻지 못했습니다. 모든 도움을 주시면 감사하겠습니다.

목표는 화살표의 배경색이 이전 섹션의 색상을 갖도록 하는 것입니다. 내가 git 저장소에 있다면 노란색이어야 합니다. 그렇지 않은 경우 파란색이어야 합니다.

여기에 이미지 설명을 입력하세요. 여기에 이미지 설명을 입력하세요.

답변1

해결책은 다음을 변경하는 것입니다.

info=$(__git_info) && printf '\e[30;43m%s' "$info"

도착하다

info=$(__git_info) && printf '\1\e[30;43m\2%s' "$info"

이는 bash가 __git_status 함수를 실행하기 전에 내부적으로 프롬프트 특수 문자 [ 및 ]를 ASCII 1 및 2로 바꾸기 때문입니다.

관련 정보