目前我的终端提示包含git信息。
示例清理目录:michaelespinosa:〜/ Sites / example.com [git:master]
示例脏目录:michaelespinosa:〜/ Sites / example.com [git:master *]
我还要为git信息着色(如果它是干净的则为绿色,如果它是脏的则为红色)。
我以为我可以添加一个函数(parse_git_color),并根据是否存在星号,使用if else语句相应地设置它的颜色。
问题是它为clean和dirty目录保持返回绿色。我认为这个问题与if语句parse_git_dirty ==“*”有关,它将parse_git_dirty的值值与“*”进行比较。
function parse_git_dirty {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_color {
if [ parse_git_dirty == "*" ]; then
echo '\033[0;31m\'
else
echo '\033[0;32m\'
fi
}
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/$(parse_git_color)[git:\1$(parse_git_dirty)]/"
}
任何帮助表示赞赏! 感谢
答案 0 :(得分:3)
请注意PS1中的\$(...)
。它是导入的,因为只有\$()
,每次打印提示时都会调用您的命令。 $()
只被调用一次(初始化PS1时)。
function parse_git_dirty
{
[[ "$(git status 2> /dev/null | tail -n1)" != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_color
{
if [ "$(parse_git_dirty)" == "*" ] ; then
echo "0;31m"
else
echo "0;32m"
fi
}
function parse_git_branch
{
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[git:\1$(parse_git_dirty)]/"
}
export PS1="\[\033[\$(parse_git_color)\]\$(parse_git_branch) \[\033[0m\]"