如何在终端中显示Git分支并实现自动更新?
问题原因
你当前的配置是在给PS1变量赋值时直接执行了git_branch函数,分支名会在source配置文件时就被固定写死到PS1字符串里,自然不会随仓库分支切换自动更新。
修复方案
只需要把PS1定义中调用git_branch的$符号转义即可,转义后\$(git_branch)会在每次终端渲染提示符时才动态执行函数,拿到实时分支信息。
修改后的完整配置如下:
# 预定义彩色文本 orange=$(tput setaf 166); # 橙色文本调用 yellow=$(tput setaf 228); # 黄色文本调用 red=$(tput setaf 001); # 红色文本调用 blue=$(tput setaf 004); # 蓝色文本调用 pink=$(tput setaf 005); # 粉色文本调用 teal=$(tput setaf 006); # 青色文本调用 green=$(tput setaf 71); # 绿色文本调用 white=$(tput setaf 15); # 白色文本调用 bold=$(tput bold); # 粗体文本调用 reset=$(tput sgr0); # 样式重置调用 # 在终端显示当前git分支 git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' } PS1="\[${bold}\]\n"; # 终端文本粗体显示并换行 PS1+="\[${blue}\] 分支:" # 显示“分支:”文本 PS1+="\[${orange}\]\$(git_branch) " # 此处$已转义,每次渲染提示符时执行函数 PS1+="\[${blue}\] 用户:" # 显示“用户:”文本 PS1+="\[${orange}\]\u "; # 显示当前登录用户 PS1+="\[${blue}\] 主机:"; # 显示“主机:”文本 PS1+="\[${orange}\]\h "; # 显示当前主机名 PS1+="\[${blue}\] 目录:"; # 显示“目录:”文本 PS1+="\[${orange}\]\W "; # 显示当前工作目录 PS1+="\n"; # 换行预留命令输入位置 PS1+="\[${white}\]-> \[${reset}\]"; # 显示命令提示符并重置样式 export PS1; # 导出PS1变量生效(可执行source ~/.bashrc立即加载)
修改完成后执行source ~/.bashrc(若配置写在~/.bash_profile则对应source该文件)即可生效,后续切换分支、切换Git仓库都会自动更新分支显示。
内容的提问来源于stack exchange,提问作者user16258101
相关产品推荐
相关产品推荐

