我需要手动源〜/ .bashrc来在我的命令提示符下显示和更新GIT分支

时间:2016-04-29 17:42:06

标签: git bash centos command-prompt .bash-profile

当我登录我的CentOS服务器时,我的~/.bashrc文件正在被采购。这很明显,因为1.)我在logger "sourcing ~/.bashrc"中收到~/.bash_profile条消息,我在/var/log/messages中看到了该消息; 2.)我的提示确实显示了我当前的工作目录,这是我的提示所特有的众多事情之一。

但是,当我进入Git仓库时,当前的Git分支没有显示:

(/home/jenkins/GitLab/testing-scripts/tests) jenkins-tests $

当我在这个回购中时,如果我找到我的~/.bashrc文件,我会看到我的Git分支,就像我预期的那样:

(/home/jenkins/GitLab/testing-scripts/tests) jenkins-tests  $ . ~/.bashrc
(/home/jenkins/GitLab/testing-scripts/tests) jenkins-tests (devel)$

如果我冒了我的分支,为了显示当前分支,我必须再次source ~/.bashrc

我的~/.bashrc执行来自here的常见__git_ps1命令。

我的~/.bash_profile包含以下内容:

GP=~/.git-prompt.sh
if [ -f $GP ]; then
  . $GP;
  logger "sourced $GP";
fi
BRC=~/.bashrc
if [ -f $BRC ]; then
  . $BRC;
  logger "sourced $BRC";
fi
BA=~/.bash_aliases
if [ -f $BA ]; then
  . $BA;
  logger "sourced $BA";
fi

我的~/.bashrc非常长(颜色和别名等),但只有两条PS1线,一条用于root,另一条用于非根。

if [ $(id -u) -ne 0 ];
then                            # You are not root
  export PS1="${BLUE}(${RED}\w${BLUE}) ${NORMAL}\h ${undgrn}$(__git_ps1) ${RED}\$ ${NORMAL}"
else
  export PS1="${RED}\u${BLUE}(${RED}\w${BLUE}) ${NORMAL}\h ${RED}\$ ${NORMAL}"
fi

注意我的提示的其余部分是如何正确格式化的,并在我更改工作目录时更新...但Git分支除非我再次source ~/.bashrc(每次都是a.k.a.)。

从我见过的其他事情中,我唯一能想到的就是采购/etc/bash_completion,我在~/.bashrc文件中很早就开始了。提示显示Git分支的事实应该表明功能上,一切都是应该的,我想。

难住了。

有什么建议吗?

1 个答案:

答案 0 :(得分:7)

您在PS1的评估时评估.bashrc的内容。这意味着如果分支发生变化或任何事情,它都不会更新。

您想要设置PROMPT_COMMAND。每次显示提示时都会对此进行评估。在那里,您必须评估PS1的当前值并进行设置。然后显示屏始终是最新的。