0

目前我的 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}它按预期工作。

我的计划是添加一些额外的更改(用任何内容替换固定路径),这样子字符串方法就不是最优的了。

这是怎么回事?

更新:
当我PS1="\[\033[33m\]\w$(__git_ps1)\[\033[0m\]\n$"直接在 shell 中执行时,它也可以按预期工作。

4

1 回答 1

2

问题在于,由于双引号,$(__git_ps1)在您定义提示时而不是在稍后绘制提示时扩展。

它直接在 shell 中工作,因为通过再次定义它,你会导致$(__git_ps1)你所在的目录再次被扩展。如果你改变分支,你会看到它被卡住了。

解决方案是使用单引号,以便$(__git_ps1)在提示中成为文字值,以便稍后评估:

PS1='\[\033[33m\]\w$(__git_ps1)\[\033[0m\]\n$ '
于 2014-05-17T22:01:23.390 回答