내 bash 프롬프트가 업데이트되지 않는 이유는 무엇입니까?


83

나는 git을 처음 접했고 다음과 같이 정의 된 기존 프롬프트에 현재 git 브랜치를 추가하려고합니다.

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w $(__git_ps1) >${NORMAL} "

나는 그것을 (내 .bashrc파일을 다시 소싱하여) 시도했고 그것이 작동하는 것처럼 보였지만 다른 지점으로 가서 업데이트되지 않았습니다. $(__git_ps1)이 캐시되지 않았 는지 어떻게 확인할 수 있습니까?


14
내가 가진의 아이디어를 사랑 :)하고 :(당신 : 마지막 명령이 실패 여부에 따라 프롬프트에서
마크 Longair

@Mark Longair : 여기에서 찾았습니다 : serverfault.com/questions/4889/… BTW, 솔루션을 삭제 한 이유는 무엇입니까?
greg0ire 2011 년

그것은 다른 두 개보다 몇 분 늦었고 어쨌든 @geekosaur의 것보다 덜 깔끔합니다
Mark Longair 2011 년

1
이 정확한 질문을 해주셔서 정말 감사합니다 (물론 그의 대답을 위해 geekosaur에게)! 나는 .bashrc 파일을 소싱했을 때 왜 내 프롬프트가 git 상태 줄을 업데이트하는지 알아 내려고 몇 시간 동안 휘청 거렸다.
coredumperror

답변:


132

에 백 슬래시가 필요 $하므로 즉시 확장되지 않습니다. ( `...`과는 다른 쓰기 방식 인과 비교하십시오 $(...).)

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w \$(__git_ps1) >${NORMAL} "

나는 작은 따옴표를 사용하는 것에 대해 @MikeSep에 동의하지만 실제로는 색상 등을 즉시 대체하는 것이 더 최적입니다. 필요하지 않고 조금 더 좋습니다. 즉 , 작은 따옴표를 사용하면 무슨 일이 일어나는지 이해하는 것이 더 쉽습니다.


2
또한 터미널 프로그램 이외의 작업 (Emacs / Vim 명령 버퍼 screen등)에서 직접 작업 한 적이 있다면 tput하드 코딩 된 색상 이스케이프 대신 사용하는 것이 좋습니다.
geekosaur 2011 년

1
이 경우 색상 변수를 대체해야합니다. 적어도 @MikeSep의 제안으로 이스케이프 코드를 얻었지만 귀하의 제안은 잘 작동합니다. (+1)
Mark Longair 2011 년

@Mark : 흥미 롭군요. ${SELECT}하나는 재귀 평가가 수행되고 있음을 보여줍니다. 명령만을위한 것일까 요? 나는 일반적으로 무슨 일이 일어나고 있는지 알아내는 것이 더 쉽기 때문에 대신 PS1 기능을 사용합니다.
geekosaur 2011 년

덕분에 당신은 @geekosaur
smonff

3
이봐, 당신은 생명의 구세주입니다. 그래도 질문이 있습니다. MBP와 iMac이 있습니다. 동일한 .bash_profile, 동일한 버전의 bash (homebrew를 통해 설치됨). MBP에서 앞에 \를 추가하지 않으면 $(__git_ps1)평가되지 않습니다. iMac에서 동일한 작업을 수행하면 \ 없이도 평가됩니다. 어떻게 이런 일이 일어날 수 있는지 아십니까?
molli 2010

24

귀하 PS1가 저장하기 전에 문자열은 아마 평가 받고있다,하지만 당신은 정말 원하는 __git_ps1명령은 명령 프롬프트를 얻을 때마다 실행합니다. 줄에 큰 따옴표 대신 작은 따옴표를 사용하는 것이 좋습니다 export PS1='${RESET}...'.


작동 할 수 있지만 모든 시스템을 작은 따옴표로 변환하는 데 문제가 있으므로 geekosaur의 솔루션을 사용하겠습니다. 하지만 당신도 내 찬성표를 얻습니다.
greg0ire 2011 년

어 그래. 그의 것이 더 낫습니다-나는 색상에 대한 지역 변수를 놓쳤습니다. 어쨌든 투표 해 주셔서 감사합니다. :)
Mike Seplowitz 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.