git - 我需要手动获取 ~/.bashrc 以在我的命令提示符中显示和更新 GIT 分支

标签 git centos command-prompt bash

当我登录我的 CentOS 服务器时,我的 ~/.bashrc正在获取文件。这是显而易见的,因为 1.) 我有一个 logger "sourcing ~/.bashrc"留言~/.bash_profile我在 /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执行公共(public) __git_ps1命令来自 here .

我的 ~/.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 分支的事实应该表明在功能上,一切都应该如此,我认为。

难倒了。

有什么建议吗?

最佳答案

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

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

关于git - 我需要手动获取 ~/.bashrc 以在我的命令提示符中显示和更新 GIT 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36944472/

相关文章:

linux - rsync不删除

mysql - 如何从 linux 文件中删除特定符号?

node.js - 当我们在 npm start 仍在运行(Node.js)时退出命令提示符时,进程会结束并且服务器会停止吗?

git - 在 VSTS merge 请求中获取真实的源代码分支名称

git - 子模块和 'git pull --rebase'

windows - git pull 错误 : cannot open . git/FETCH_HEAD 错误:权限被拒绝

Windows 终端应用程序中的 C 颜色文本

git - Git 2.x 中的 `git add .` 和 `git add -A` 是否相同?

firefox - centOS、Jenkins、Firefox 和 Selenium GRID -- UnableToCreateProfileException

java - 如何在Java中读取命令提示符中的开头