저는 쉘 스크립팅이 처음이고 "?"와 같은 색상과 문자를 사용하여 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) $ '