90

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

| improve this question | | | | |
  • 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
  • 1
    You can find a collection of script for this in the ArchWiki. – aloisdg moving to codidact.com 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
  • 1
    FWIW, this seems to be where the image came from: web.archive.org/web/20110809032233/https://bbs.archlinux.org/…. The post includes the colour scheme used, and the opening post in the thread cites the source code used to generate the picture. – mwfearnley Dec 21 '18 at 14:49
91

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 "
        done
        echo
    done
done
echo ""

One-liner:

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

| improve this answer | | | | |
  • 2
    FYI, {30..37} is equivalent to `seq 30 37` in bash and is faster. – Barry Kelly Dec 16 '15 at 5:18
  • 2
    @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 ? – cyber8200 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
  • 1
    This also works on macOS, just replace \e with \033. – Atika Dec 6 '19 at 8:59
48

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

| improve this answer | | | | |
39

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

msgcat --color=test
| improve this answer | | | | |
  • 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. – Jacek Trociński Aug 6 '18 at 12:00
  • 2
    For anyone else interested, --color=test is mentioned in section 9.11.2 The environment variable 'TERM' under info msgcat – Gerrit0 Sep 5 '19 at 2:44
34

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))
            else:
                write("%d;%d;%d: \33[%d;%d;%dm Hello, World! \33[m \n" %
                      (i, j, k, i, j, k,))
        write("\n")

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.

| 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: 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 – airstrike Feb 13 '19 at 19:47
7

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:

ansi-colors

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)!

| improve this answer | | | | |
  • Will this work on the Mac ? – cyber8200 Feb 10 '17 at 15:12
  • Is these the only 7 colors we can have ??? – cyber8200 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
5

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:

#!/bin/bash
#
#   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";
  done
  echo;
done
echo
| improve this answer | | | | |
1

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

| improve this answer | | | | |
1

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

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

print_colors(){
  # Print column headers.
  printf "%-4s  " '' ${bgs[@]}
  echo
  # 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"
      done
      echo
    done
  done
}

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

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

Example output:

gnome-terminal screenshot

| improve this answer | | | | |
1

This question is actually a top result when I search on how to display color codes in a terminal. So I wanted to give justice and give what the OP exactly was looking for. I do remember the screenshot is somewhat familiar. At first, I thought it was from Gogh however it's a bit different. I then realized it's exactly the same script being used in iTerm2 colors.

Lucky enough, they added a comment on where it originally came from

I'm posting the script for reference, taken from iTerm2 with original credits:

#!/bin/bash
#
#   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).
#
#   Copied from http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html

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";
  done
  echo;
done
echo

Here's the script in action:

enter image description here

| improve this answer | | | | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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