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

gre*_*ire 79 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} "
Run Code Online (Sandbox Code Playgroud)

我尝试了(通过.bashrc再次获取我的文件)它似乎工作,但后来我去了另一个分支,它没有更新.我怎样才能确保$(__git_ps1)没有缓存?

gee*_*aur 124

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

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

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

  • 男人,你是生命的救星.我有一个问题:我有一个MBP和一个iMac.相同的.bash_profile,相同版本的bash(通过自制软件安装).在MBP上如果我不在`$(__ git_ps1)`之前添加\,它将不会被评估.如果我在iMac上做同样的事情,即使没有\它也会得到评估.知道怎么会这样吗? (3认同)
  • 另外,如果你曾经直接在终端程序之外工作(Emacs/Vim 命令缓冲区、`screen` 等),你可能需要考虑使用 `tput` 而不是硬编码的颜色转义。 (2认同)

Mik*_*itz 21

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