2011-10-21 81 views
1
# show git branch 
function parse_git_branch { 
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' 
} 

function proml { 
    local  BLUE="\[\033[0;34m\]" 
    local   RED="\[\033[0;31m\]" 
    local LIGHT_RED="\[\033[1;31m\]" 
    local  GREEN="\[\033[0;32m\]" 
    local LIGHT_GREEN="\[\033[1;32m\]" 
    local  WHITE="\[\033[1;37m\]" 
    local LIGHT_GRAY="\[\033[0;37m\]" 
    case $TERM in 
    xterm*) 
    TITLEBAR='\[\033]0;\[email protected]\h:\w\007\]' 
    ;; 
    *) 
    TITLEBAR="" 
    ;; 
    esac 

PS1="${TITLEBAR}\ 
$WHITE\w$GREEN\$(parse_git_branch)$BLUE\ 
$GREEN\$ " 
PS2='> ' 
PS4='+ ' 
} 
proml 

上述代碼返回分支名稱三次。我只需要看一次...配置bash_profile顯示git分支返回我的分支兩次

~/projects/sms(apps2)$ 
(apps2) 
(apps2) 

我該如何解決這個問題,只顯示路徑+分支?

即.. ~/projects/sms(apps2)$

+1

是否將最後一行更改爲'PROMPT_COMMAND = proml'修復了任何問題?我在'〜/ .bashrc'中有一個類似的腳本,它工作得很好。 – ayoy

+0

這是行之有效的。如果你回答問題w我會接受答案。 –

回答

3

這是你的腳本弄亂的東西的最後一行。調用proml直接從~/.bash_profile~/.bashrc設置PS*環境變量只有一次,所以它將不會更新當您更改文件夾(並且您可能有顯示在您稍後輸入的每個文件夾中)。

相反,proml應在腳本的最後一行被設置爲PROMPT_COMMAND

PROMPT_COMMAND=proml 

PROMPT_COMMAND持有的bash顯示提示之前每次被執行的函數的名稱。詳情請參閱here

此外,對於git-aware shell提示,還有一個很好的補充,你已經有了。除當前分支外,您可以獲得有關未提交更改的指示。見例如this blog postparse_git_dirty()功能。

3

嘗試改變最後一行PROMPT_COMMAND=proml

;-)