我想使用其中一个Git-completion.bash功能,但我无法自定义我想拥有的外观。这是我的.bash_profile的相关部分:
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替换为下面的导出PS1,它将按预期工作:
export PS1='\w$(__git_ps1 "(%s)") > '
我猜这是一些撇号/引号问题。
我应该如何更正第一个版本才能使其正常工作?
答案 0 :(得分:31)
获得正确引用的诀窍是将eveything双引号,但$(__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
,因此您必须确保第一次替换使$(...)
保持不变。所以你要写'$(...)'
或"\$(...)"
。这些是我提出的解决方案背后的两个基本思想。
答案 1 :(得分:5)
不确定,但vcprompt可能会更好地解决这个问题吗?