我在用着这将 git 分支名称添加到 PS1 变量的指南。我做了一些改动,保留了我当前的提示主题,并为 git 分支名称添加了绿色背景。
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="$PS1\e[30;48;5;82m$(parse_git_branch)\e[0m \[\033[00m\]"
看起来一切正常,但是当我离开目录时,git 分支名称仍然存在。如果我在非 git 目录中运行终端,然后 cd 进入 git,我看不到分支的名称。但是当我打开另一个终端选项卡时,我就能看到它了。
我使用带有 Bash shell 的 Guake 终端。
答案1
parse_git_branch
发生这种情况是因为您的提示被设置为提示设置时的值,每次运行时您都需要它来运行该函数。
您需要在\
前面添加一个$(parse_git_branch)
,这样当设置提示时美元符号就会被隐藏,因此它不会运行。执行提示时美元符号将可见,并且括号中的命令将运行,从而显示您所在文件夹的正确值。
export PS1="$PS1\e[30;48;5;82m\$(parse_git_branch)\e[0m \[\033[00m\]"
本页第二段的 bash 文档对此进行了解释 http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x279.html
这里的另一个有用的技巧是运行/bin/bash -x
并尝试它,这可以向您展示更多正在发生的事情。
答案2
我假设您已将代码段添加到~/.bashrc
。这意味着PS1
变量仅设置一次,然后在您更改目录时不会更改值。要使其正常工作,PS1
需要在每次 之后重新评估的值cd
。
解决此问题的一种方法是将 设置PROMPT_COMMAND
为重置 的函数。在每个 bash 提示符之前都会评估PS1
的值(请参阅)。PROMPT_COMMAND
man bash
但是,更简单的方法是安装liquidprompt
它可以完成您想要的操作,甚至更多。
sudo apt-get install liquidprompt && liquidprompt_activate
然后,您可以根据自己的心意配置动态提示。