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

  • 1
    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
  • 1
    You can find a collection of script for this in the ArchWiki. – aloisdg Jan 8 '16 at 7:44
  • 1
    I packaged a few color printing scripts, and put them here, complete with examples, thanks, and brew installation. – pvinis Jul 25 '16 at 8:15
  • 1
    @pvinis thanks! I spent way too much time trying to find the exact one shown in the screen of OP. – verboze Nov 30 '18 at 23:14

Here is my solution with Bash only:

for x in {0..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 "
echo ""


for x in {0..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 ""

Here's a picture in Cygwin:

Cygwin screenshot

  • 1
    FYI, {30..37} is equivalent to `seq 30 37` in bash and is faster. – Barry Kelly Dec 16 '15 at 5:18
  • 1
    @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
  • Will this work on a Mac ? – kyo Feb 10 '17 at 15:13
  • @ihue See if this answers your question: Simple Tricks to Improve the Terminal Appearance in Mac OS X. For more details, check AskDifferent.com – wjandrea Feb 12 '17 at 0:56
  • Sample code did not work on MacOS but the python answer worked. – sorin Jul 3 '17 at 9:42

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


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.

  • 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: 5img.com/img13/740/24screenshot.png 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're a god among men. Best cross-platform solution. Thanks – Andre Terra Feb 13 at 19:47

A simple one-liner that should work for most people.

msgcat --color=test
  • Deadsimple. Is it possible to get only default background color? – vrcmr Aug 3 '18 at 21:18
  • msgcat --help doesn't explain waht you did... Is it an easter egg? – vrcmr Aug 3 '18 at 21:30
  • @vrcmr I stumbled across this one-liner in a blog somewhere, sometime ago and unfortunately could not find any mention of --color=test in the msgcat man page as well. I consider it to be a non-configurable easter egg. – JacK TrocinskI Aug 6 '18 at 12:00

i made a little script for that :)

you pass it a number n and it spits out n colored lines along with each color's ansi index (you can use it in $(tput setaf <ansi-index>)).

here's a screenshot of the (partial) output:


i also got this one, which i forked (and slightly modified) from twerth:

#!/usr/bin/env bash

echo -e "\033[0mNC (No color)"
echo -e "\033[1;37mWHITE\t\033[0;30mBLACK"
echo -e "\033[0;34mBLUE\t\033[1;34mLIGHT_BLUE"
echo -e "\033[0;32mGREEN\t\033[1;32mLIGHT_GREEN"
echo -e "\033[0;36mCYAN\t\033[1;36mLIGHT_CYAN"
echo -e "\033[0;31mRED\t\033[1;31mLIGHT_RED"
echo -e "\033[0;35mPURPLE\t\033[1;35mLIGHT_PURPLE"
echo -e "\033[0;33mYELLOW\t\033[1;33mLIGHT_YELLOW"
echo -e "\033[1;30mGRAY\t\033[0;37mLIGHT_GRAY"

… which, in my current theme, shows:

terminal puts out (it's colors)!

  • Will this work on the Mac ? – kyo Feb 10 '17 at 15:12
  • Is these the only 7 colors we can have ??? – kyo Feb 10 '17 at 15:12
  • @ihue - of course not, i made a script for that.. check it out. you can pass it a number n (e.g. 256) and it will spit out the n colors your terminal supports. – Eliran Malka Feb 11 '17 at 23:26
  • Your script is cool, but #!/usr/bin/env sh is not a good idea. It doesn't work with the default shell of Ubuntu, which is dash. I had to change it to bash. – Teresa e Junior Nov 8 '17 at 4:03

Recently wanted to find that script that many people are refering myself. It's from the tldp.org Bash Prompt HOWTO - http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html. 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";

Refer https://askubuntu.com/a/396555/41013 That will print the following output with formats like BOLD ,UNDERLINE , Highlighting and colors.

Small script to display possible terminal colors


This is a modified version of the TLDP script here. It shows standard colors and vivid colors (codes 90-97 and 100-107).

# Show available terminal colours.
# Heavily modified version of the TLDP script here:
# http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html

  # Print column headers.
  printf "%-4s  " '' ${bgs[@]}
  # Print rows.
  for bold in ${bolds[@]}; do
    for fg in ${fgs[@]}; do
      # Print row header
      printf "%s;%s  " $bold $fg
      # Print cells.
      for bg in ${bgs[@]}; do
        # Print cell.
        printf "\e[%s;%s;%sm%s\e[0m  " $bold $fg $bg "text"

# Print standard colors.
bolds=( 0 1 )
fgs=( 3{0..7} )
bgs=( 4{0..8} )

# Print vivid colors.
bolds=( 0 ) # Bold vivid is the same as bold normal.
fgs=( 9{0..7} )
bgs=( 10{0..8} )

Example output:

gnome-terminal screenshot

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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