2015-11-04 74 views
0

我对BASH的经验有限,我正在寻找一些关于如何进行的指导,请耐心等待。bash如果按功能设置变量

我试图改变命令提示符,当我在git仓库里面,我可以使用这个post我在谷歌上找到了,但是我也想根据仓库的当前状态添加颜色(干净,未跟踪的文件,已修改的文件)。

目前我有这个在我的.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> " 

命令提示符的变化,但就像我认为它应该不会改变颜色。

这里是我所得到的,而不是:
外混帐回购协议arod:~\[\033[0m\]>
一个git回购arod:~/tos\[\033[0;32m\][dev]>

我不确定如何让色彩来评价,我认为,只是在寻找一些指导内从比我有更多BASH经验的人。

+0

示例:'echo -e“\ 033 [31m Hello World”'。检查此链接:http://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux – Noproblem

+0

这是我正在寻找的解决方案。谢谢 –

+0

使用'printf'(由POSIX定义)比'echo -e'更好(除了使用'-e'输出外,bash实际上违反了标准。 –

回答

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> " 

在问题的代码,这一个之间的主要区别是,我没有添加-e标志呼应,并从颜色变量除去\的。

希望这可以帮助别人

编辑

接收比特更多的反馈后,这里就是这个貌似现在:

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达菲来了。
我没有合并的唯一的东西是使用tput获取颜色转义序列。