为什么我的bash提示没有更新?

时间:2011-03-21 15:40:15

标签: git bash ps1

我是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)未缓存?

2 个答案:

答案 0 :(得分:121)

您需要$上的反斜杠,因此不会立即展开。 (与`...`比较,这是另一种撰写$(...)的方式。)

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

我同意@MikeSep关于使用单引号的问题,但实际上让颜色立即更换是更优化的。没必要,只是稍好一点。也就是说,如果您使用单引号, 更容易理解发生了什么。

答案 1 :(得分:20)

您的PS1字符串可能在保存之前已经过评估,但您确实希望每次获得命令提示符时都运行__git_ps1命令。我建议您为export PS1='${RESET}...'行使用单引号而不是双引号。