在Shell提示符中显示Git分支?

4
我正在尝试让我的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

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


首先,显而易见的是,您在配置文件中引用了 git-completion.bash 吗? - Barend
3
你的 PROMPT= 行明显不完整,因为它以 ${PROMPT_CHAR$ 结尾。请修正该行。 - Jonathan Leffler
2个回答

12
更简单的解决方法:引用GIT_STATUS,这样它就不会在bash启动时被评估,而是在bash显示提示时被评估。

更简单的解决方法:引用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不是一个好主意。


为什么导出PS1不是一个好主意?我在谷歌上搜索并找到了http://thread.gmane.org/gmane.linux.lfs.beyond.devel/15803。看起来是个很好的理由。+1 谢谢。 - Pablo Marin-Garcia
我的电脑上没有 /.bash_profile 文件。我有一个类似的 /.bashrc 文件,但当我添加你写的内容时,它没有任何作用。我应该创建一个新的 /.bash_profile 文件吗? - user0

1

你希望每次显示提示符之前,都更新PS1以包含当前分支,也就是在你键入下一个命令之前进行更新。通过在precmd函数中再次设置PS1来请求bash执行此操作。bash会在显示提示符之前运行此函数:

precmd() {
    PS1=...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接