Showing git branch in shell prompt?

2019-06-24 03:34发布

问题:

I am trying to get my shell prompt to display the current git branch name.

I have read a few tutorials and blog posts etc. and as far as I understand I'm doing everything correctly but it doesn't seem to be working.

I would like the prompt to look like this:

dannys-macbook:hillcrest-store [master]$

but currently it looks like this:

dannys-macbook:hillcrest-store danny$ 

I have added the following to ~/.bash_profile:

PATH=$PATH:/usr/local/bin; export PATH

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR$
PS1="$PROMPT"
export PS1

I'm not sure what I'm doing wrong, maybe I should be 'resetting' the prompt somehow?

回答1:

You want PS1 to be updated to contain the current branch every time the prompt is displayed, that is, before you type the next command. Ask bash to do this by setting PS1 again in the precmd function. bash runs this function before showing you the prompt:

precmd() {
    PS1=...
}


回答2:

Simpler solution: quote the GIT_STATUS so it doesn't get evaluated on bash startup, but instead gets evaluated when bash is displaying the prompt:

COLOR1='\[\e[1;32m\]'
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS='$(__git_ps1 " %s")'
PROMPT_CHAR='\$'
PS1="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR}"

Also note that exporting PS1 is not a good idea.