Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Throughout the internet I have seen many people with scripts that prints out a bunch of stuff in all the colors defined in ~/.Xdefaults. However when I try to use these, I always get error: Bad Substitution. Does anyone have a working script that does the same thing?

It should end up looking something like this: enter image description here

share|improve this question
Maybe it's easier if you post the script you're using, and how and from where you're invocating it. – luri Feb 20 '11 at 21:56
With one of the scripts that don't work, try to change the first line to #!/bin/sh (if it isn't already that) and see if it makes a difference (it should be something similar) – Stefano Palazzo Feb 20 '11 at 22:07
A useful function along these lines for emacs users: M-x list-colors-display. – Brian Z Mar 24 '15 at 8:17
You can find a collection of script for this in the ArchWiki. – aloisdg Jan 8 at 7:44
up vote 32 down vote accepted

Here is my solution with bash only:

for x in 0 1 4 5 7 8; do for i in `seq 30 37`; do for a in `seq 40 47`; do echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "; done; echo; done; done; echo "";

Here's a picture:

image showing the output of that command in bash

share|improve this answer
FYI, {30..37} is equivalent to `seq 30 37` in bash and is faster. – Barry Kelly Dec 16 '15 at 5:18
@BarryKelly: good tip, thanks. just tested and as you noted: it's really much faster!!! :-) so here is the new one: for x in 0 1 4 5 7 8; do for i in {30..37}; do for a in {40..47}; do echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "; done; echo; done; done; echo ""; – oktay Dec 17 '15 at 11:56

Here's my version:

#!/usr/bin/env python
import sys
terse = "-t" in sys.argv[1:] or "--terse" in sys.argv[1:]
write = sys.stdout.write
for i in range(2 if terse else 10):
    for j in range(30, 38):
        for k in range(40, 48):
            if terse:
                write("\33[%d;%d;%dm%d;%d;%d\33[m " % (i, j, k, i, j, k))
                write("%d;%d;%d: \33[%d;%d;%dm Hello, World! \33[m \n" %
                      (i, j, k, i, j, k,))

This prints everything. If you want a nice table (that only shows style (0) and (1), normal and bold), you can use the -t or --terse argument:

The 'blink' style (5) doesn't work with gnome-terminal. ;-)

If this doesn't work for you, there's something else wrong. Please let us know once you've tested it.

share|improve this answer
My prompt color is defined like this: DULL=0 BRIGHT=1 FG_WHITE=37 WHITE="\[$ESC[${DULL};${FG_WHITE}m\]" Why is it, that the dull white (0;37;40) is more gray than white, and the bright white (1;37;40) is bolded? I'd like to set the terminal font to bright-white-on-black, not bolded. When I run your script, 1;37;40 looks perfectly allright after the first line: So, my PS1 line is in the color of the text 0;30;40; I'd like it in the color of 0;30;41. – appas Nov 17 '11 at 10:59
Does anyone else find this magenta particularly ugly? It looks like mud. – Ether Jun 13 '12 at 18:37

You can also use the colortest Install colortest package.

  1. Install it with this command:

    sudo apt-get install colortest
  2. It provides several commands which you can use, depending on how many colors you want:

    colortest-16   colortest-16b  colortest-256  colortest-8

Example output from colortest-16b:

enter image description here

share|improve this answer

Refer That will print the following output with formats like BOLD ,UNDERLINE , Highlighting and colors.

Small script to display possible terminal colors

share|improve this answer

Recently wanted to find that script that many people are refering myself. It's from the Bash Prompt HOWTO - The script is authored by Daniel Crisman.

It outputs exactly the same as on the pic from the question. The script itself:

#   This file echoes a bunch of color codes to the 
#   terminal to demonstrate what's available.  Each 
#   line is the color code of one forground color,
#   out of 17 (default + 16 escapes), followed by a 
#   test use of that color on all nine background 
#   colors (default + 8 escapes).

T='gYw'   # The test text

echo -e "\n                 40m     41m     42m     43m\
     44m     45m     46m     47m";

for FGs in '    m' '   1m' '  30m' '1;30m' '  31m' '1;31m' '  32m' \
           '1;32m' '  33m' '1;33m' '  34m' '1;34m' '  35m' '1;35m' \
           '  36m' '1;36m' '  37m' '1;37m';
  do FG=${FGs// /}
  echo -en " $FGs \033[$FG  $T  "
  for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
    do echo -en "$EINS \033[$FG\033[$BG  $T  \033[0m";
share|improve this answer

I packaged a few color printing scripts, and put them here, complete with examples, thanks, and brew installation.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.