I wanted to use one of the Git-completion.bash features but I can't customize the look I'd like to have. Here is relevant part of my .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
and it doesn't show the branch name.
However, if I replace export PS1 above with the one below, it works as expected:
export PS1='\w$(__git_ps1 "(%s)") > '
I guess it's some apostrophe / quotation marks issue.
How should I correct the 1st version to get it to work?
Not sure, but vcprompt might solve it better for you?
The trick to get the quoting right is to have eveything double-quoted, except for
$(__git_ps1 "(%s)")
, which is single-quoted.An alternative solution is to replace
$(
with\$(
in the code in the question.Background information: Two substitutions take place: first at
export PS1="..."
time, and later when the prompt is displayed. You want to execute__git_ps1
each time the prompt is displayed, so you have to make sure that the first substitution keeps$(...)
intact. So you write either'$(...)'
or"\$(...)"
. These are the two basic ideas behind the solutions I've proposed.