How to customize your Bash shell prompt
When you are working on the command line with Git it can get confusing
as to what branch you are currently in. Both Emacs (with the right
plugin) and VS Code are good at handling this - in both cases an
indication of the current branch is clearly displayed. But if you are
on the command line you have no clear indication of your current Git
branch - you'd have to type
git branch or
git status to see where
I'm assuming you're on a Mac and editing the
.bash_profile file, but
most of that discussed below would also work on Linux.
First look at simple uncolourized prompt string:
This would simply display a prompt such as
would not use custom colours.
However, using ANSI escape codes you can colourize the prompt.
Note that to a certain extent the final look of the shell prompt will be determined by any Terminal themes you might be using.
Example prompt string (this is what I use):
PS1='\[\033[01;31m\]\u@\h\[\033[00m\]: \[\033[01;33m\]\w\[\033[00m\] \[\033[01;35m\][$(git branch 2>/dev/null | grep '^*' | colrm 1 2)]\[\033[00m\] \[\033[01;36m\]\$\[\033[00m\] '
Here's the same prompt but I've manually wrapped it over multiple lines to make it easier to read:
PS1='\[\033[01;31m\]\u@\h\[\033[00m\]: \ \[\033[01;33m\]\w\[\033[00m\] \ \[\033[01;35m\][$(git branch 2>/dev/null \ | grep '^*' \ | colrm 1 2)]\[\033[00m\] \ \[\033[01;36m\]\$\[\033[00m\] '
Breaking it down...
Start of escape code to set an ANSI colour:
End of colourize escape code:
For example, to get a colourized
$ character in the prompt you could use:
To get your Git branch displayed in your Bash shell prompt use:
[$(git branch 2>/dev/null | grep '^*' | colrm 1 2)]
grep is used to find the
* character, as your current branch
is marked with
* when you type a
git branch command.
The column remove command
colrm simply removes the first colum in
the output of the
git branch command, leaving you with just the name
of the current branch (without the
And you can then colourize it with:
\[\033[01;35m\][$(git branch 2>/dev/null | grep '^*' | colrm 1 2)]\[\033[00m\]
You will end up with a prompt that looks something like:
abedford@bilbo ~/checkouts/tbedford/Website-test [master] $
The actual colours that will appear depend on any Terminal themes being used.
Some resources you might find useful: