终端提示基本bash脚本

问题描述:

目前我的终端提示包含git信息。终端提示基本bash脚本

实施例清洁目录:michaelespinosa:〜/站点/ example.com [GIT中:主]
例脏目录:michaelespinosa:〜/站点/ example.com [GIT中:主*]

我想也为git信息着色(如果它是干净的则为绿色,如果是脏的则为红色)。

我以为我可以添加一个函数(parse_git_color),并根据是否存在星号来设置它的颜色。

问题在于它对于干净和肮脏的目录都保持绿色。我相信这个问题与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)]/" 
} 

任何帮助表示赞赏! 谢谢

请注意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\]" 
+0

我更新了您的建议,但没有奏效。我以michaelespinosa结束:〜/ Sites/example.com 033 [0; 32m [git:master]。我认为这个问题与if语句有关,因为无论发生什么,它都会一直返回。 – michaelespinosa 2012-02-17 20:56:15

+0

@michaelespinosa Sry,我没有测试我的建议。我修复了我的答案。 – sgibb 2012-02-17 21:48:50

+0

感谢@sgibb关键是将parse_git_dirty更改为“$(parse_git_dirty)” – michaelespinosa 2012-02-17 22:34:09