2012-02-17 246 views
2

目前我的終端提示包含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)]/" 
} 

任何幫助表示讚賞! 謝謝

回答

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\]" 
+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