我尝试将当前的 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) 向我们展示您的提示应该是什么样的。