【问题标题】:I'm required to manually source ~/.bashrc to display and update GIT branch in my command prompt我需要手动获取 ~/.bashrc 以在我的命令提示符下显示和更新 GIT 分支
【发布时间】:2016-04-30 01:47:06
【问题描述】:

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

但是,当我 cd 进入 Git 存储库时,当前的 Git 分支并未显示:

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

当我在这个 repo 中时,如果我获取我的 ~/.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,一条用于非 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(也就是每次)。

从我所看到的所有其他方面来看,我唯一能想到的另一件事是采购/etc/bash_completion,我很早就在我的~/.bashrc 文件中这样做了。提示显示 Git 分支的事实应该表明,在功能上,一切都应该是,我想。

难倒。

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

    您想改为设置PROMPT_COMMAND。每次显示提示时都会对此进行评估。在那里你必须评估PS1 的当前值并设置它。然后显示总是最新的。

    【讨论】:

    • 如此重要的细节我还没有接受。我一直在尝试一些不同的东西,但仍然无法得到它。你能告诉我为什么这不起作用吗:PROMPT_COMMAND='PS1="${BLUE}(${RED}\w${BLUE}) ${NORMAL}\h ${undgrn}$(__git_ps1) ${RED}\$ ${NORMAL}"'
    • __git_ps1 值未显示在我的提示中。我尝试创建一个函数并通过将其分配给 PROMPT_COMMAND 来调用它,但这也不会显示我的 git 分支。现在,我的提示完全没有使用上述分配进行更改。我收到了默认的 bash 提示符。
    • 那你可能做错了什么。你完全使用 bash 吗?如果我从评论中执行您的版本,我的提示将更改为您编码的内容,并且在显示它的每个新提示中都会抱怨找不到 __git_ps1
    • 是的,我在 bash 中。 PROMPT_COMMAND 似乎根本没有为我做任何事情。我可以自己玩 PS1 并获取文件 (~/.bashrc) 并查看我的提示更改,但简单的 PROMPT_COMMAND='echo -n Hi!' 似乎永远不会被执行。注销并重新登录,采购......我似乎没有从中得到任何东西。我现在正在做PROMPT_COMMAND='gps=$(__git_ps1)' 然后用 ${gps} 变量制作我的 PS1。这看起来很简单,但我没有看到 PROMPT_COMMAND 正在执行的证据。
    • 终于搞定了。首先,我在~/.bashrc 的下方还有另一行,用于检查$TERM 是否为xterm*。那是重置我的PROMPT_COMMAND。然后,我在使用PROMPT_COMMAND 调用的函数中构建了 PS1,它终于奏效了!感谢您让我知道PROMPT_COMMAND
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2011-11-09
    • 2010-11-20
    相关资源
    最近更新 更多