How to Customize Bash Colors and Content in Linux Terminal Prompt

Today, Bash is the default shell in most (if not all) modern Linux distributions. However, you may have noticed that the text color in the terminal and the prompt content can be different from one distro to another.

Suggested Read: 5 Most Frequently Used Open Source Shells for Linux

In case you have been wondering how to customize this for better accessibility or mere whim, keep reading – in this article we will explain how to do just that.

The PS1 Bash Environment Variable

The command prompt and terminal appearance are governed by an environment variable called PS1. According to the Bash man page, PS1 represents the primary prompt string which is displayed when the shell is ready to read a command.

The allowed content in PS1 consists of several backslash-escaped special characters whose meaning is listed in the PROMPTING section of the man page.

To illustrate, let’s display the current content of PS1 in our system (this may be somewhat different in your case):

$ echo $PS1

[\[email protected]\h \W]$

We will now explain how to customize PS1 as per our needs.

Customizing the PS1 Format

According to the PROMPTING section in the man page, this is the meaning of each special character:

  1. \u: the username of the current user.
  2. \h: the hostname up to the first dot (.) in the Fully-Qualified Domain Name.
  3. \W: the basename of the current working directory, with $HOME abbreviated with a tilde (~).
  4. \$: If the current user is root, display #, $ otherwise.

For example, we may want to consider adding \! If we want to display the history number of the current command, or \H if we want to display the FQDN instead of the short server name.

In the following example we will import both into our current environment by executing this command:

PS1="[\[email protected]\H \W \!]$"

When you press Enter you will see that the prompt content changes as shown below. Compare the prompt before and after executing the above command:

Customize Linux Terminal Prompt PS1

Customize Linux Terminal Prompt PS1

Now let’s go one step further and change the color of the user and hostname in command prompt – both the text and its surrounding background.

Actually, we can customize 3 aspects of the prompt:

Text Format Foreground (text) color Background color
0: normal text 30: Black 40: Black
1: bold 31: Red 41: Red
4: Underlined text 32: Green 42: Green
33: Yellow 43: Yellow
34: Blue 44: Blue
35: Purple 45: Purple
36: Cyan 46: Cyan
37: White 47: White

We will use the \e special character at the beginning and an m at the end to indicate that what follows is a color sequence.

In this sequence the three values (background, format, and foreground) are separated by commas (if no value is given the default is assumed).

Suggested Read: Learn Bash Shell Scripting in Linux

Also, since the value ranges are different, it does not matter which one (background, format, or foreground) you specify first.

For example, the following PS1 will cause the prompt to appear in yellow underlined text with red background:

PS1="\e[41;4;33m[\[email protected]\h \W]$ "
Change Linux Terminal Color Prompt PS1

Change Linux Terminal Color Prompt PS1

As good as it looks, this customization will only last for the current user session. If you close your terminal or exit the session, the changes will be lost.

In order to make these changes permanent, you will have to add the following line to ~/.bashrc or ~/.bash_profile depending on your distribution:

PS1="\e[41;4;33m[\[email protected]\h \W]$ "

Feel free to play around with the colors to find what works best for you.

Summary

In this article we have explained how to customize the color and content of your Bash prompt. If you have questions or suggestions about this post, feel free to use the comment form below to reach us. We look forward to hearing from you!

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

Gabriel Cánepa

Gabriel Cánepa is a GNU/Linux sysadmin and web developer from Villa Mercedes, San Luis, Argentina. He works for a worldwide leading consumer product company and takes great pleasure in using FOSS tools to increase productivity in all areas of his daily work.

Your name can also be listed here. Got a tip? Submit it here to become an TecMint author.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide

You may also like...

2 Responses

  1. Matt Gerasoilo says:

    Is there a way to make it so only when root the text is coded differently. For example, normal user = black text, but root = red color text?

    • dragonmouth says:

      Each user has a .bashrc file in his/her /home directory. To achieve what you want, you need to code for BLACK text in the normal user .bashrc and for RED text in the root .bashrc.

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.