在shell提示符下显示git分支?

时间:2011-09-03 18:28:21

标签: git branch prompt osx-lion .bash-profile

我试图让shell提示符显示当前的git分支名称。

我已经阅读了一些教程和博客文章等等,据我所知,我正在做正确的事情,但它似乎没有起作用。

我希望提示看起来像这样:

dannys-macbook:hillcrest-store [master]$

但目前看起来像这样:

dannys-macbook:hillcrest-store danny$ 

我已将以下内容添加到〜/ .bash_profile:

PATH=$PATH:/usr/local/bin; export PATH

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR$
PS1="$PROMPT"
export PS1

我不确定我做错了什么,也许我应该以某种方式'重置'提示?

2 个答案:

答案 0 :(得分:12)

更简单的解决方案:引用GIT_STATUS以便它不会在bash启动时得到评估,而是在bash显示提示时进行评估:

COLOR1='\[\e[1;32m\]'
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS='$(__git_ps1 " %s")'
PROMPT_CHAR='\$'
PS1="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR}"

另请注意,导出PS1不是一个好主意。

答案 1 :(得分:1)

您希望每次显示提示时(即在您键入下一个命令之前)更新PS1以包含当前分支。请求bash通过在precmd函数中再次设置PS1来执行此操作。 bash在显示提示之前运行此函数:

precmd() {
    PS1=...
}