为什么我的bash提示不更新?

我是新来的混帐,我试图将当前的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)没有被caching?

$需要反斜杠,所以不能立即扩展。 (与`...`比较,这是一种写作$(...)的不同方式)

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

我会同意@MikeSep关于使用单引号,但实际上是让颜色等立即被replace的一个更好的select。 没有必要,只是稍微好一些。 这就是说,如果你使用单引号,就很容易理解到底发生了什么。

您的PS1string在获得保存之前可能会被评估,但是您真的希望每次获得命令提示时都运行__git_ps1命令。 我build议使用单引号而不是双引号来export PS1='${RESET}...'行。