我需要手动获取 ~/.bashrc 以在我的命令提示符中显示和更新 GIT 分支
I'm required to manually source ~/.bashrc to display and update GIT branch in my command prompt
当我登录到我的 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
(a.k.a。每个时间)。
从我所看到的所有其他内容来看,我唯一能想到的就是采购 /etc/bash_completion
,我在我的 ~/.bashrc
文件中很早就开始这样做了。事实上,提示显示 Git 分支应该表明在功能上,一切都应该如此,我想。
难倒了。
有什么建议吗?
您在 .bashrc
的评估时间评估 PS1
的内容。这意味着如果分支发生变化或发生任何变化,它当然不会更新。
您想改为设置 PROMPT_COMMAND
。每次显示提示时都会对其进行评估。在那里你必须评估 PS1
的当前值并设置它。然后显示始终是最新的。
当我登录到我的 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
(a.k.a。每个时间)。
从我所看到的所有其他内容来看,我唯一能想到的就是采购 /etc/bash_completion
,我在我的 ~/.bashrc
文件中很早就开始这样做了。事实上,提示显示 Git 分支应该表明在功能上,一切都应该如此,我想。
难倒了。
有什么建议吗?
您在 .bashrc
的评估时间评估 PS1
的内容。这意味着如果分支发生变化或发生任何变化,它当然不会更新。
您想改为设置 PROMPT_COMMAND
。每次显示提示时都会对其进行评估。在那里你必须评估 PS1
的当前值并设置它。然后显示始终是最新的。