BASH Shell Change The Color of Shell Prompt on Linux or UNIX

Tutorial details Difficulty Easy (rss) Root privileges No Requirements Bash Time N/A

ADVERTISEMENTS



Task: Display current BASH prompt (PS1)

How do I change the color of my shell prompt under Linux or Unix operating systems?You can change the color of your shell prompt to impress your friend or to make your own life quite easy while working at the command prompt. BASH shell is the default under Linux and Apple OS X. Your current prompt setting is stored in a shell variable called PS1. There are other variables too, like PS2, PS3 and PS4.Bash displays the primary prompt PS1 when it is ready to read a command, and the secondary prompt PS2 when it needs more input to complete a command. Bash allows these prompt strings to be customized by inserting a number of backslash-escaped special characters.

Use the echo command to display current BASH prompt:

$ echo $PS1

Sample outputs:

[\\u@\h \\W]\\$

Here is another output from my Debian based system:

$ echo $PS1

Sample outputs:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

By default the command prompt is set to [\u@\h \W]\$ . The backslash-escaped special characters are decoded as follows:

\u : Display the current username .

: Display the current username . \h : Display the hostname

: Display the hostname \W : Print the base of current working directory.

: Print the base of current working directory. \$ : Display # (indicates root user) if the effective UID is 0, otherwise display a $.

Task: Modify current BASH prompt

Before you modify settings save your old prompt using the following command:

oldps1="$PS1"

So if you messed up, you can switch back easily using the following syntax:

PS1="$oldps1"

Use the export command to setup a new shell prompt:

$ export PS1="[\\u@\\H \\W \\@]\\$ "

Sample outputs:

Where,

\H : Display FQDN hostname.

: Display FQDN hostname. \@ : Display current time in 12-hour am/pm format

Task: Add colors to the prompt

To add colors to the shell prompt use the following export command syntax:

'\e[x;ym $PS1 \e[m'

Where,

\e[ : Start color scheme.

: Start color scheme. x;y : Color pair to use (x;y)

: Color pair to use (x;y) $PS1 : Your shell prompt variable.

: Your shell prompt variable. \e[m : Stop color scheme.

To set a red color prompt, type the following command:

$ export PS1="\e[0;31m[\u@\h \W]\$ \e[m "

Sample outputs:

A list of color codes

Color Code Black 0;30 Blue 0;34 Green 0;32 Cyan 0;36 Red 0;31 Purple 0;35 Brown 0;33 Blue 0;34 Green 0;32 Cyan 0;36 Red 0;31 Purple 0;35 Brown 0;33

Note: You need to replace digit 0 with 1 to get light color version.

Task: How do I make the prompt setting permanent?

Your new shell prompt setting set by $PS1 is temporary i.e. when you logout setting will be lost. To have it set every time you login to your workstation add above export command to your $HOME/.bash_profile file or $HOME/.bashrc file.

$ cd

$ vi .bash_profile



OR

$ vi $HOME/.bashrc

Append the following line:

export PS1="\e[0;31m[\u@\h \W]\$ \e[m"

Save and close the file in vim/vi.

Bash Change The Color of Shell Prompt Example

Add the following command in ~/.bashrc:

# let us setup prompt export PS1 = "\[\e[32m\][\[\e[m\]\[\e[31m\]\u\[\e[m\]\[\e[33m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]:\[\e[36m\]\w\[\e[m\]\[\e[32m\]]\[\e[m\]\[\e[32;47m\]\ \$ \[\e[m\] " # let us setup prompt export PS1="\[\e[32m\][\[\e[m\]\[\e[31m\]\u\[\e[m\]\[\e[33m\]@\[\e[m\]\[\e[32m\]\h\[\e[m\]:\[\e[36m\]\w\[\e[m\]\[\e[32m\]]\[\e[m\]\[\e[32;47m\]\\$\[\e[m\] "

You will get prompt as follows:



Here is another example that include exit status of command as well:

# #\u - user name #\h - short hostname #\W - current working dir #\? - exit status of the command export PS1 = "{\[\e[32m\]\u\[\e[m\]@\[\e[36m\]\h\[\e[m\]:\W_ \$ ?}$ " # #\u - user name #\h - short hostname #\W - current working dir #\? - exit status of the command export PS1="{\[\e[32m\]\u\[\e[m\]@\[\e[36m\]\h\[\e[m\]:\W_\$?}$ "

Say hello to tput command

You can also use tput command to set terminal and modify the prompt settings. For example, to display RED color prompt using a tput:

export PS1="\[$(tput setaf 1)\]\u@\h:\w $ \[$(tput sgr0)\]"

A list of handy tput command line options

tput bold – Bold effect

– Bold effect tput rev – Display inverse colors

– Display inverse colors tput sgr0 – Reset everything

– Reset everything tput setaf {CODE} – Set foreground color, see color {CODE} table below for more information.

– Set foreground color, see color {CODE} table below for more information. tput setab {CODE} – Set background color, see color {CODE} table below for more information.

Various color codes for the tput command

Color {code} Color 0 Black 1 Red 2 Green 3 Yellow 4 Blue 5 Magenta 6 Cyan 7 White

Recommend readings

HowTo: Change or setup your bash custom prompt (PS1) – This tutorial explains how-to customizing a bash shell to get a good looking prompt, configure the appearance of the terminal and apply themes using bashish package.

man page – bash