88

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

4

2 回答 2

141

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

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

我同意@MikeSep 关于使用单引号的观点,但实际上让颜色等被立即替换更为理想。没必要,稍微好点。也就是说,如果您使用单引号,则更容易理解发生了什么。

于 2011-03-21T15:45:57.037 回答
25

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

于 2011-03-21T15:42:25.297 回答