Changing colour of text and background of terminal?

I can change the colour through preference , but how can I change the background colour and text colour of terminal through the command line?


On certain XTerm/ANSI-compatible terminals (like xterm and gnome-terminal), you can set colors using a palette bigger then the default 8/16-colors palette (for example using an 88-colors, 256-colors or 16777216-colors (RGB) palette; both xterm and gnome-terminal support both the 256-colors and the 16777216-colors (RGB) palette); mind that the shell might override this (this is the case e.g. for zsh).

Here's a script to list the colors in the 256-color palette along with their ANSI color code in XTerm/ANSI-compatible terminals with a 256-color palette support:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

screenshot1

screenshot

Depending on whether you want to apply the color to the foreground or to the background, use an <fg_bg> value of 38 or 48 (respectively) in the following command:

printf '\e[<fg_bg>;5;<ANSI_color_code>m'

For example, to set the foreground color (<fg_bg>=38) to red (<ANSI_color_code>=196) and the background color (<fg_bg>=48) to black (<ANSI_color_code>=0):

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

screenshot3

It's necessary to redraw the prompt using printf '\e[K' in order for the background color to apply to the whole line and in order for the foreground color to apply to the cursor:

screenshot4

The same thing can be accomplished using RGB values instead of ANSI color codes in a compatible terminal; depending on whether you want to apply the color to the foreground or to the background, use an <fg_bg> value of 38 or 48 (respectively) in the following command:

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'

For example, to set the foreground color (<fg_bg>=38) to red (<R>=255, <G>=0, <B>=0) and the background color (<fg_bg>=48) to black (<R>=0, <G>=0, <B>=0):

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

screenshot5

Again, it's necessary to redraw the prompt using printf '\e[K' in order for the background color to apply to the whole line and in order for the foreground color to apply to the cursor:

screenshot6

Using either methods, you can use printf '\e[0m' to reset all the attributes:

screenshot7


Information as found on this page, excluding preview column:

Sequences are composed of the Escape character (often represented by ”^[” or ”<Esc>”) followed by some other characters: ”^[FCm” (where FC is one of the numbers in the bulleted list below).

In bash, the Esc code can be either of the following:

  1. \e
  2. \033 (octal)
  3. \x1B (hexadecimal)

Note 1: The "\e[0m" sequence removes all attributes (formatting and colors). It can be a good idea to add it at the end of each colored text.

Note 2: Foreground and background colours may vary, depending on the terminal's configuration and not all colours are supported.

Set/Reset

  • 0: Reset/remove all modifier, foreground and background attributes: echo -e "\e[0mNormal Text"
  • 1: Bold/Bright: echo -e "Normal \e[1mBold"
  • 2: Dim: echo -e "Normal \e[2mDim"
  • 4: Underlined: echo -e "Normal \e[4mUnderlined"
  • 5: Blink (doesn't work in most terminals except XTerm): echo -e "Normal \e[5mBlink"
  • 7: Reverse/Invert: echo -e "Normal \e[7minverted"
  • 8: Hidden (useful for sensitive info): echo -e "Normal \e[8mHidden Input"
  • 21: Reset/Remove bold/bright: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22: Reset/Remove dim: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24: Reset/Remove underline: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25: Reset/Remove blink: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27: Reset/Remove reverse/invert: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28: Reset/Remove hidden: echo -e "Normal \e[8mHidden \e[28mNormal"

Foreground

  • 39: Default (usually green, white or light gray): echo -e "Default \e[39mDefault"
  • 30: Black: echo -e "Default \e[30mBlack" (best combined with a background colour: echo -e "Default \e[30;107mBlack on white")
  • 31: Red (don't use with green background)
  • 32: Green
  • 33: Yellow
  • 34: Blue
  • 35: Magenta/Purple
  • 36: Cyan
  • 37: Light Gray
  • 90: Dark Gray
  • 91: Light Red
  • 92: Light Green
  • 93: Light Yellow
  • 94: Light Blue
  • 95: Light Magenta/Pink
  • 96: Light Cyan
  • 97: White

Background

  • 49: Default background color (usually black or blue)
  • 40: Black
  • 41: Red
  • 42: Green
  • 43: Yellow
  • 44: Blue
  • 45: Magenta/Purple
  • 46: Cyan
  • 47: Light Gray (don't use with white foreground)
  • 100: Dark Gray (don't use with black foreground)
  • 101: Light Red
  • 102: Light Green (don't use with white foreground)
  • 103: Light Yellow (don't use with white foreground)
  • 104: Light Blue (don't use with light yellow foreground)
  • 105: Light Magenta/Pink (don't use with light foreground)
  • 106: Light Cyan (don't use with white foreground)
  • 107: White (don't use with light foreground)

To set both the foreground and background colours at once, use ther form echo -e "\e[S;FG;BGm". For example: echo -e "\e[1;97;41m" (bold white foreground on red background)

For 256 colour options, see the source page.