星期六早上的愚蠢代码段。
我在网上找到了一个片段代码,可以让我在PS1中获得当前分支,太棒了!但...
我希望根据分支有不同的颜色。
我说,“你对bash一无所知但应该很简单!只是一个......”
经过6个小时的测试,我们走了。
有人可以解释一下我的问题在哪里吗?
我知道GitHub上有很多项目可以帮我完成这项工作,但我想了解一下。
非常感谢
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
set_ps1_git_branch_color(){
BRANCH=$(parse_git_branch)
if [ $BRANCH == "(master)" ]; then
echo -e "\W\[\033[35m\] $BRANCH \[\033[00m\]"
fi
if [ $BRANCH == "(test)" ]; then
echo -e "\W\[\033[32m\] $BRANCH \[\033[00m\]"
fi
}
export PS1="\u@\h $(set_ps1_git_branch_color) $ "
只有在每次git操作(如checkout)之后执行source ~/.bash_profile
时,它才有效。
但是原始代码段parse_git_branch()
能够在没有source命令的情况下更改分支名称。
所以...我在这里缺少什么? :(
答案 0 :(得分:3)
export PS1="\u@\h $(set_ps1_git_branch_color) $ "
# should be (added \ before $(set...))
# the \ will execute the command during runtime and not right now.
# without the \ it will executed and determined of first run and not every time
export PS1="\u@\h \$(set_ps1_git_branch_color) $ "
# Output colors
red='\033[0;31m';
green='\033[0;32m';
yellow='\033[0;33m';
default='\033[0;m';
set_ps1_git_branch_color(){
...
echo -e "${green} $BRANCH ${default}"
}
# Output colors
red='\033[0;31m';
green='\033[0;32m';
yellow='\033[0;33m';
default='\033[0;m';
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
set_ps1_git_branch_color(){
BRANCH=$(parse_git_branch)
if [ $BRANCH == "(master)" ]; then
echo -e "${green} $BRANCH ${default}"
fi
if [ $BRANCH == "(test)" ]; then
echo -e "${yellow} $BRANCH ${default}"
fi
}
export PS1="\u@\h \$(set_ps1_git_branch_color) $ "
答案 1 :(得分:2)
以防有人感兴趣。
此脚本显示PS1中的分支, 如果分支是“主人”。名字会变红并闪烁 如果分支是“测试”名称将为黄色并闪烁。 对于其他分支,颜色将为白色。
# Output colors
red='\033[31;5m';
white='\033[0;97m';
yellow='\033[33;5m';
default='\033[0;m';
blue='\033[0;34m';
magenta='\033[0;35m';
cyan='\033[0;36m';
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
set_ps1_git_branch_color(){
BRANCH=$(parse_git_branch)
if [ -z $BRANCH ]; then
return 0
fi
if [ $BRANCH = "(master)" ]; then
echo -e "${red}${BRANCH}${default}"
return 0
fi
if [ $BRANCH = "(test)" ]; then
echo -e "${yellow}${BRANCH}${default}"
return 0
fi
echo -e "${white}${BRANCH}${default}"
}
export PS1="${cyan}\h ${magenta}\u ${blue}\w\$(set_ps1_git_branch_color)${default} \n\\$ \[$(tput sgr0)\]"
非常感谢CodeWizard! :)