Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Append git's branch name to command prompt

Tags:

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?

like image 830
Piotr Byzia Avatar asked May 03 '09 10:05

Piotr Byzia


People also ask

How do I copy a branch name?

Hold ctrl and left click with the mouse on the branch name. This will prompt a context menu, click Copy. The fast way is to ctrl + double left click so you instantly close the context menu and select the branch name.

How do I show a branch in bash?

For example, I open it using the VS Code using this command: code . bash_profile. Then just paste the following codes to your Bash. will fetch the branch name & then through PS1 you can show it in your terminal.


1 Answers

The trick to get the quoting right is to have eveything double-quoted, except for $(__git_ps1 "(%s)"), which is single-quoted.

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 

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.

like image 168
pts Avatar answered Sep 22 '22 08:09

pts