PS1의 에코 텍스트 물음표

PS1의 에코 텍스트 물음표

저는 쉘 스크립팅이 처음이고 "?"와 같은 색상과 문자를 사용하여 git 브랜치의 상태를 표시하기 위한 좋은 힌트를 제공하려고 노력하고 있습니다.

추적되지 않은 새 파일이 있는 경우 PS1이 다음과 같이 보이도록 하고 싶습니다.

p/a/t/h/ (staging ?) $

즉, pwd(분기 네임스페이스 물음표) $

문제를 다음 코드(~/.bashrc)로 줄였습니다.

parseGitBranch () {
     gitBranch=staging
     ifUntrackedFiles="$gitBranch ?"
     echo $ifUntrackedFiles
 }

 PS1="`parseGitBranch` $ "

내 문제는 물음표 앞에 공백이 있기 때문에 PS1이 이를 와일드카드로 처리하고 디렉토리에 존재하는 단일 문자 파일을 표시한다는 것입니다.

p/a/t/h/ (staging ?) touch a
p/a/t/h/ (staging ?) source ~/.bashrc
p/a/t/h/ (staging a) $

공백 없이도 잘 작동하지만 여전히 지점 이름 뒤에 공백이 필요합니다.

p/a/t/h/ (staging?) $

나는 또한 다음을 시도했습니다.

ifUntrackedFiles="$gitBranch"' ?'

echo -e

토큰이 출력하기 전의 백슬래시(임시 \?)

PS1에서 물음표를 제거하는 방법은 무엇입니까?

감사해요!

답변1

Bourne 쉘에서 변수를 인용하지 않는 것(즉, $var대체 "$var")은 예외입니다. 여기서 문제는 당신의 echo명령입니다. 를 사용하면 echo ?디렉토리 ?의 모든 단일 문자 파일이 바뀌고, 을 사용하면 echo "?"물음표가 그대로 표시됩니다.

그러면 귀하의 기능은 다음과 같아야합니다 :

parseGitBranch () {
     gitBranch=staging
     ifUntrackedFiles="$gitBranch ?"
     echo "$ifUntrackedFiles"
 }

그리고 역따옴표는 작은따옴표와 쉽게 혼동되고 중첩하기 어렵기 때문에 대신 다음을 사용하세요 $(...).

 PS1='$(parseGitBranch) $ '

관련 정보