提示不更新 git 分支

提示不更新 git 分支

我尝试将当前的 git 分支集成到我的提示中,但它的行为不符合预期。我在 ubuntu 16.04 上使用 bash,git 2.7.4。当我启动终端时,没有显示任何 git 内容。如果我.bashrc从存储库内部获取我的代码,则会显示分支,但不会再更新。这是我在 .bashrc 中写的内容:

green="\[\033[01;32m\]"
blue="\[\033[01;34m\]"
no_color="\[\033[00m\]"
purple="\[\033[01;35m\]"

source ~/.git-prompt.sh
export PS1="$purple\u $green$(__git_ps1 " (%s)") $blue\W $no_color \$ "

更新:

我尝试按照git 提示符但结果还是一样。但是,如果我只是从 git-prompt 复制建议:PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '它有效,但当然看起来不像我想要的那样。我遗漏了一些语法错误吗?即使不使用导出,模板 PS1 也可以工作,只需PS1=...

答案1

好的,我找到了解决方案。没有必要使用 prompt 命令。该错误是由于语法错误引起的。

如果我分配 PS1 的内容以便""使用我的变量作为颜色,它仅在.bashrc获取时执行 __git_ps1 函数。

但是当我在其中分配 PS1 内容''并且不使用颜色变量而是写出代码时,它按预期工作。当我读到这里似乎更好的做法是不要将 PS1 导出到环境中。

因此解决方案如下:

PS1='\[\033[01;35m\]\u \[\033[01;32m\]$(__git_ps1 " (%s)") \[\033[01;34m\]\W \[\033[00m\] \$ '

但是我很好奇,这是什么原因造成的。它在""macOS 中可以正常工作。

答案2

遇到了同样的问题。你可以简单地退出$(...)\$(...)

export PS1="$purple\u $green\$(__git_ps1 " (%s)") $blue\W $no_color \$ "

答案3

这是因为.bashrc只读取一次:当您启动新的交互式非登录 shell 时(例如,当您打开新终端时)。因此 在PS1您第一次打开终端时设置,并且永远不会改变。

正确的做法(假设你的git-prompt__git_ps脚本按预期工作)是使用PROMPT_COMMAND。如中所述man bash

   PROMPT_COMMAND
          If set, the value is executed as a command prior to issuing each
          primary prompt.

您希望__git_ps1在显示每个提示之前运行(因此在您运行的每个命令之后;cd例如在 之后)。因此,您需要将其放入 中PROMPT_COMMAND。如​​果您的__git_ps1与我认为的一样,它将为您设置PS1。您只需要在每次显示提示时运行它。因此,将此行添加到您的 中~/.bashrc

PROMPT_COMMAND="$purple\u $green$(__git_ps1 "(%s)") $blue\W $no_color \$ "

最后,由于您没有显示相关脚本,因此我无法确定,但我非常怀疑(%s)那里是否有意义。这只会打印字符串%s。如果您需要更多帮助,请编辑您的问题并 i) 包括__git_ps1/etc/bash_completion.d/git-prompt(或者如果它们来自 Ubuntu 软件包,请告诉我们您如何安装它们)和 ii) 向我们展示您的提示应该是什么样的。

相关内容