2015-11-04 75 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獲取顏色轉義序列。