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
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'
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:
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'
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:
Using either methods, you can use printf '\e[0m'
to reset all the attributes:
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:
\e
-
\033
(octal) -
\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.