目前我的Windows Git Bash shell提示符如下所示:
UserName@ComputerName Path (Branch)
当我echo $PS1
时,我得到:
\[\033]0;$MSYSTEM:\w\007\]\n\[\033[32m\]\u@\h \[\033[33m\]\w$(__git_ps1)\[\033[0m\]\n$
在我的.bashrc
文件中,我试图像这样更新:
PS1="\[\033[32m\]\w$(__git_ps1)\[\033[0m\]\n$"
发生的事情是我失去了UserName@ComputerName
这就是我想要的。但由于某种原因,$(__git_ps1)
也消失了。
但是当我这样做时:PS1=${PS1:46}
它按预期工作。
我的计划是添加一些额外的更改(替换没有任何固定路径),因此子串方法不是最优的。
发生了什么事?
更新
当我直接在shell中执行PS1="\[\033[33m\]\w$(__git_ps1)\[\033[0m\]\n$"
时,它也可以按预期工作。
答案 0 :(得分:2)
问题在于,由于双引号,$(__git_ps1)
在定义提示时扩展,而不是在稍后提取提示时扩展。
它直接在shell中工作,因为通过再次定义它,可以使$(__git_ps1)
再次针对您所在的目录进行扩展。如果更改分支,您将看到它被卡住了。
解决方案是使用单引号,以便$(__git_ps1)
成为提示中的文字值,以便稍后进行评估:
PS1='\[\033[33m\]\w$(__git_ps1)\[\033[0m\]\n$ '