我对BASH的经验有限,我正在寻找有关如何继续的指导,请耐心等待。
我正在尝试更改命令提示符,当我在git repo中时,我可以使用我在谷歌上找到的这个post,但我也想根据当前的状态添加颜色repo(干净,未跟踪的文件,修改过的文件)。
目前我的.bashrc文件末尾有这个:
parse_git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/'
}
modified () {
git status 2> /dev/null | grep -q modified
}
untracked () {
git status 2> /dev/null | grep -q Untracked
}
clean () {
git status 2> /dev/null | grep -q clean
}
NO_COLOR="\[\033[0m\]"
GREEN="\[\033[0;32m\]"
YELLOW="\[\033[0;33m\]"
RED="\[\033[0;31m\]"
set_color () {
if untracked ; then
echo $RED
elif modified ; then
echo $YELLOW
elif clean ; then
echo $GREEN
else
echo $NO_COLOR
fi
}
PS1="\u:\w\$(set_color)\$(parse_git_branch)$NO_COLOR> "
命令提示符会更改,但不会像我认为的那样更改颜色。
以下是我得到的内容:
外部git repo arod:~\[\033[0m\]>
在git仓库中 arod:~/tos\[\033[0;32m\][dev]>
我不确定如何评估我认为的颜色,只是寻找一些比我有更多BASH经验的人的指导。
答案 0 :(得分:0)
如果有人在寻找答案;或至少我使用的解决方案:
parse_git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/'
}
modified () {
git status 2> /dev/null | grep -q modified
}
untracked () {
git status 2> /dev/null | grep -q Untracked
}
clean () {
git status 2> /dev/null | grep -q clean
}
NO_COLOR="\033[0m"
GREEN="\033[0;32m"
YELLOW="\033[0;33m"
RED="\033[0;31m"
set_color () {
if untracked ; then
echo -e $RED
elif modified ; then
echo -e $YELLOW
elif clean ; then
echo -e $GREEN
else
echo -e $NO_COLOR
fi
}
PS1="\u:\w\$(set_color)\$(parse_git_branch)$NO_COLOR> "
问题中的代码和这个代码之间的主要区别在于我确实在echo中添加了-e标志,并从颜色变量中删除了\。' s。
希望这有助于某人
修改强>
收到更多反馈后,现在的情况如下:
parse_git_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/'
}
no_color="\033[0m"
green="\033[0;32m"
yellow="\033[0;33m"
red="\033[0;31m"
set_color () {
case "$(git status 2> /dev/null)" in
*Untracked*)
printf '%b' "$red";;
*modified*)
printf '%b' "$yellow";;
*clean*)
printf '%b' "$green";;
*)
printf '%b' "$no_color";;
esac
}
PS1="\u:\w\$(set_color)\$(parse_git_branch)$no_color> "
所有这些都来自@Charles Duffy 我没有采用的唯一方法是使用tput来获取颜色转义序列。