2009-05-03 91 views
19

我想使用其中一個Git-completion.bash功能,但我無法自定義我想要的外觀。這裏是我的.bash_profile文件的相關部分:將git的分支名稱追加到命令提示符

source ~/.git-completion.bash 

function prompt 
{ 
local WHITE="\[\033[1;37m\]" 
local GREEN="\[\033[0;32m\]" 
local CYAN="\[\033[0;36m\]" 
local GRAY="\[\033[0;37m\]" 
local BLUE="\[\033[0;34m\]" 
export PS1=" 
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w $(__git_ps1 '(%s)') ${GRAY} 
$ " 
} 
prompt 

,並沒有顯示分支名稱。

但是,如果我用下面的一個替代上述出口PS1,它按預期工作:

export PS1='\w$(__git_ps1 "(%s)") > ' 

我想這是一些撇號/引號的問題。

我應該如何糾正第一個版本才能使其工作?

回答

31

獲得報價權的訣竅是除了單引號的$(__git_ps1 "(%s)")之外,還有雙引號。

source ~/.git-completion.bash 
function prompt 
{ 
local WHITE="\[\033[1;37m\]" 
local GREEN="\[\033[0;32m\]" 
local CYAN="\[\033[0;36m\]" 
local GRAY="\[\033[0;37m\]" 
local BLUE="\[\033[0;34m\]" 
export PS1=" 
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w"' $(__git_ps1 "(%s)") '"${GRAY}" 
} 
prompt 

另一種解決方案是在問題的代碼與\$(取代$(

背景信息:發生兩次替換:首先在export PS1="..."時間以及稍後顯示提示時。每次顯示提示時您都要執行__git_ps1,因此您必須確保第一個替換保持完整$(...)。所以你寫'$(...)'"\$(...)"。這是我提出的解決方案背後的兩個基本思想。

+0

就是這樣!謝謝:) – 2009-05-03 11:25:47

5

不確定,但vcprompt可能爲您解決更好嗎?

+1

它可能不包括在混帳completion.bash __git_ps1的所有選項,但我真的很喜歡這樣的事實,它提供了有關其他版本控制系統的信息也是如此。謝謝你的提示! – 2009-09-16 17:42:48