back to listing index

bash:tip_colors_and_formatting - FLOZz' MISC

[web search]
Original source (misc.flogisoft.com)
Tags: terminal terminal-color-codes
Clipped on: 2015-09-23

FLOZz' MISC » bash:tip_colors_and_formatting

You are here: home » bash » tip_colors_and_formatting

Bash tips: Colors and formatting (ANSI/VT100 Control sequences)

The ANSI/VT100 terminals and terminal emulators are not just able to display black and white text ; they can display colors and formatted texts thanks to escape sequences. Those sequences are composed of the Escape character (often represented by ”^[” or ”<Esc>”) followed by some other characters: ”<Esc>[FormatCodem”.

In Bash, the <Esc> character can be obtained with the following syntaxes:

  • \e
  • \033
  • \x1B

Examples:

Code (Bash) Preview
echo -e "\e[31mHello World\e[0m"
Image (Asset 1/62) alt=
echo -e "\033[31mHello\e[0m World"
Image (Asset 2/62) alt=

NOTE¹: The -e option of the echo command enable the parsing of the escape sequences.

NOTE²: 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³: The examples in this page are in Bash but the ANSI/VT100 escape sequences can be used in every programming languages.

Formatting

Here are the most commonly supported control sequences for formatting text. Their support depends on the used terminal (see the compatibility list).

Set

Code Description Example Preview
1 Bold/Bright
echo -e "Normal \e[1mBold"
Image (Asset 3/62) alt=
2 Dim
echo -e "Normal \e[2mDim"
Image (Asset 4/62) alt=
4 Underlined
echo -e "Normal \e[4mUnderlined"
Image (Asset 5/62) alt=
5 Blink 1)
echo -e "Normal \e[5mBlink"
Image (Asset 6/62) alt=
7 Reverse (invert the foreground and background colors)
echo -e "Normal \e[7minverted"
Image (Asset 7/62) alt=
8 Hidden (usefull for passwords)
echo -e "Normal \e[8mHidden"
Image (Asset 8/62) alt=

Reset

Code Description Example Preview
0 Reset all attributes
echo -e "\e[0mNormal Text"
Image (Asset 9/62) alt=
21 Reset bold/bright
echo -e "Normal \e[1mBold \e[21mNormal"
Image (Asset 10/62) alt=
22 Reset dim
echo -e "Normal \e[2mDim \e[22mNormal"
Image (Asset 11/62) alt=
24 Reset underlined
echo -e "Normal \e[4mUnderlined \e[24mNormal"
Image (Asset 12/62) alt=
25 Reset blink
echo -e "Normal \e[5mBlink \e[25mNormal"
Image (Asset 13/62) alt=
27 Reset reverse
echo -e "Normal \e[7minverted \e[27mNormal"
Image (Asset 14/62) alt=
28 Reset hidden
echo -e "Normal \e[8mHidden \e[28mNormal"
Image (Asset 15/62) alt=

8/16 Colors

The following colors works with most terminals and terminals emulators 2), see the compatibility list for more informations.

NOTE: The colors can vary depending of the terminal configuration.

Foreground (text)

Code Color Example Preview
39 Default foreground color
echo -e "Default \e[39mDefault"
Image (Asset 16/62) alt=
30 Black
echo -e "Default \e[30mBlack"
Image (Asset 17/62) alt=
31 Red
echo -e "Default \e[31mRed"
Image (Asset 18/62) alt=
32 Green
echo -e "Default \e[32mGreen"
Image (Asset 19/62) alt=
33 Yellow
echo -e "Default \e[33mYellow"
Image (Asset 20/62) alt=
34 Blue
echo -e "Default \e[34mBlue"
Image (Asset 21/62) alt=
35 Magenta
echo -e "Default \e[35mMagenta"
Image (Asset 22/62) alt=
36 Cyan
echo -e "Default \e[36mCyan"
Image (Asset 23/62) alt=
37 Light gray
echo -e "Default \e[37mLight gray"
Image (Asset 24/62) alt=
90 Dark gray
echo -e "Default \e[90mDark gray"
Image (Asset 25/62) alt=
91 Light red
echo -e "Default \e[91mLight red"
Image (Asset 26/62) alt=
92 Light green
echo -e "Default \e[92mLight green"
Image (Asset 27/62) alt=
93 Light yellow
echo -e "Default \e[93mLight yellow"
Image (Asset 28/62) alt=
94 Light blue
echo -e "Default \e[94mLight blue"
Image (Asset 29/62) alt=
95 Light magenta
echo -e "Default \e[95mLight magenta"
Image (Asset 30/62) alt=
96 Light cyan
echo -e "Default \e[96mLight cyan"
Image (Asset 31/62) alt=
97 White
echo -e "Default \e[97mWhite"
Image (Asset 32/62) alt=

Background

Code Color Example Preview
49 Default background color
echo -e "Default \e[49mDefault"
Image (Asset 33/62) alt=
40 Black
echo -e "Default \e[40mBlack"
Image (Asset 34/62) alt=
41 Red
echo -e "Default \e[41mRed"
Image (Asset 35/62) alt=
42 Green
echo -e "Default \e[42mGreen"
Image (Asset 36/62) alt=
43 Yellow
echo -e "Default \e[43mYellow"
Image (Asset 37/62) alt=
44 Blue
echo -e "Default \e[44mBlue"
Image (Asset 38/62) alt=
45 Magenta
echo -e "Default \e[45mMagenta"
Image (Asset 39/62) alt=
46 Cyan
echo -e "Default \e[46mCyan"
Image (Asset 40/62) alt=
47 Light gray
echo -e "Default \e[47mLight gray"
Image (Asset 41/62) alt=
100 Dark gray
echo -e "Default \e[100mDark gray"
Image (Asset 42/62) alt=
101 Light red
echo -e "Default \e[101mLight red"
Image (Asset 43/62) alt=
102 Light green
echo -e "Default \e[102mLight green"
Image (Asset 44/62) alt=
103 Light yellow
echo -e "Default \e[103mLight yellow"
Image (Asset 45/62) alt=
104 Light blue
echo -e "Default \e[104mLight blue"
Image (Asset 46/62) alt=
105 Light magenta
echo -e "Default \e[105mLight magenta"
Image (Asset 47/62) alt=
106 Light cyan
echo -e "Default \e[106mLight cyan"
Image (Asset 48/62) alt=
107 White
echo -e "Default \e[107mWhite"
Image (Asset 49/62) alt=

88/256 Colors

Some terminals (see the compatibility list) can support 88 or 256 colors. Here are the control sequences that permit you to use them.

NOTE¹: The colors number 256 is only supported by vte (GNOME Terminal, XFCE4 Terminal, Nautilus Terminal, Terminator,…).

NOTE²: The 88-colors terminals (like rxvt) does not have the same color map that the 256-colors terminals. For showing the 88-colors terminals color map, run the ”256-colors.sh” script in a 88-colors terminal.

Foreground (text)

For using one of the 256 colors on the foreground (text color), the control sequence is ”<Esc>[38;5;ColorNumberm” where ColorNumber is one of the following colors:

Image (Asset 50/62) alt=

Examples:

Code (Bash) Preview
echo -e "\e[38;5;82mHello \e[38;5;198mWorld"
Image (Asset 51/62) alt=
for i in {16..21} {21..16} ; do echo -en "\e[38;5;${i}m#\e[0m" ; done ; echo
Image (Asset 52/62) alt=

Background

For using one of the 256 colors on the background, the control sequence is ”<Esc>[48;5;ColorNumberm” where ColorNumber is one of the following colors:

Image (Asset 53/62) alt=

Examples:

Code (Bash) Preview
echo -e "\e[40;38;5;82m Hello \e[30;48;5;82m World \e[0m"
Image (Asset 54/62) alt=
for i in {16..21} {21..16} ; do echo -en "\e[48;5;${i}m \e[0m" ; done ; echo
Image (Asset 55/62) alt=

Attributes combination

Terminals allow attribute combinations. The attributes must be separated by a semicolon (”;”).

Examples:

Description Code (Bash) Preview
Bold + Underlined
echo -e "\e[1;4mBold and Underlined"
Image (Asset 56/62) alt=
Bold + Red forground + Green background
echo -e "\e[1;31;42m Yes it is awful \e[0m"
Image (Asset 57/62) alt=

Terminals compatibility

Terminal Formatting Colors Comment
Bold Dim Underlined Blink invert Hidden 8 16 88 256
aTerm ok - ok - ok - ok ~ - - Lighter background instead of blink.
Eterm ~ - ok - ok - ok ~ - ok Lighter color instead of Bold. Lighter background instead of blink. Can overline a text with the ”^[[6m” sequence.
GNOME Terminal ok ok ok - ok ok ok ok - ok Strikeout with the ”^[[9m” sequence.
Guake ok ok ok - ok ok ok ok - ok Strikeout with the ”^[[9m” sequence.
Konsole ok - ok ok ok - ok ok - ok
Nautilus Terminal ok ok ok - ok ok ok ok - ok Strikeout with the ”^[[9m” sequence.
rxvt ok - ok ~ ok - ok ok ok - If the background is not set to the default color, Blink make it lighter instead of blinking. Support of italic text with the ”^[[3m” sequence.
Terminator ok ok ok - ok ok ok ok - ok Strikeout with the ”^[[9m” sequence.
Tilda ok - ok - ok - ok ok - - Underline instead of Dim. Convert 256-colors in 16-colors.
XFCE4 Terminal ok ok ok - ok ok ok ok - ok Strikeout with the ”^[[9m” sequence.
XTerm ok - ok ok ok ok ok ok - ok
xvt ok - ok - ok - - - - -
Linux TTY ok - - - ok - ok ~ - - Specials colors instead of Dim and Underlined. Lighter background instead of Blink, Bug with 88/256 colors.
VTE Terminal 3) ok ok ok - ok ok ok ok - ok Strikeout with the ”^[[9m” sequence.

Notations used in the table:

  • ok”: Supported by the terminal.
  • ~”: Supported in a special way by the terminal.
  • -”: Not supported at all by the terminal.

Demonstration programs

Colors and formatting (16 colors)

Image (Asset 58/62) alt=

The following shell script displays a lot of possible combination of the attributes (but not all, because it uses only one formatting attribute at a time).

colors_and_formatting.sh
#!/bin/bash
 
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.
 
#Background
for clbg in {40..47} {100..107} 49 ; do
	#Foreground
	for clfg in {30..37} {90..97} 39 ; do
		#Formatting
		for attr in 0 1 2 4 5 7 ; do
			#Print the result
			echo -en "\e[${attr};${clbg};${clfg}m ^[${attr};${clbg};${clfg}m \e[0m"
		done
		echo #Newline
	done
done
 
exit 0

256 colors

Image (Asset 59/62) alt=

The following script display the 256 colors available on some terminals and terminals emulators like XTerm and GNOME Terminal.

256-colors.sh
#!/bin/bash
 
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.
 
for fgbg in 38 48 ; do #Foreground/Background
	for color in {0..256} ; do #Colors
		#Display the color
		echo -en "\e[${fgbg};5;${color}m ${color}\t\e[0m"
		#Display 10 colors per lines
		if [ $((($color + 1) % 10)) == 0 ] ; then
			echo #New line
		fi
	done
	echo #New line
done
 
exit 0

Links

1) Does not work with most of the terminal emulators, works in the tty and XTerm.
2) Some terminals supports only the first 8 colors (30..37 and 40..47), and some others does not support any color at all.
3) GTK Widget used in GNOME Terminal, Nautilus Terminal, XFCE4 Terminal…

Discussion

Image (Asset 60/62) alt=William C Grisaitis, 2011/11/13 02:00
Thanks! This was invaluable in customizing my PS1's:

if [[ ${EUID} == 0 ]] ; then
PS1='\e[1;31;48;5;234m\u \e[38;5;240mon \e[1;38;5;28;48;5;234m\h \e[38;5;54m\d \@\e[0m\n\e[0;31;48;5;234m[\w] \e[1m\$\e[0m '
else
PS1='\e[1;38;5;56;48;5;234m\u \e[38;5;240mon \e[1;38;5;28;48;5;234m\h \e[38;5;54m\d \@\e[0m\n\e[0;38;5;56;48;5;234m[\w] \e[1m\$\e[0m '
fi

@caravaggisto
Image (Asset 61/62) alt=Barry Scott, 2012/06/14 21:41
Great work on terminal compatibility.I have been trying to get blinking text on a Linux tty(at the console). Do you have any idea if it's possible?
Image (Asset 62/62) alt=Fabien LOISON, 2012/06/14 21:54
I Think it is possible, but I haven't found how to do that
Real name:
E-Mail:
Enter your comment:
Subscribe to comments