Bash ansi escape codes

From wikinotes

Terminals are controled ansi escape sequences.
These sequences vary from terminal to terminal.
The tput command uses your terminal's termcap library to expose a common interface.

Colours

Termcap Database (portable-ish)

See list of colours https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit

tput looks up escape codes within the termcap database.
using tput ensures your code is portable across the unixes.

echo '\e[1m'      # bold
echo '\e[32m'     # color '2'
echo '\e[m'       # reset colour
# or assign to var
blue=$(echo -e '\e[36m')

tput setab 7 # set bg colour
tput setaf 7 # set fg colour
tput bold    # set bold
tput sgr0    # reset colours

yellow=$(tput setaf 3)
echo "${yellow}foo"

I usually do something like this for help text

setup_colours() {
    if [ $(tput colors) -gt 8 ] ; then
        C=$(tput setaf 6)  # code
        H=$(tput setaf 3)  # heading
        E=$(tput setaf 1)  # error
        B=$(tput bold)     # bold
        R=$(tput sgr0)     # reset
    else
        C=$(tput sgr0)
        H=$(tput sgr0)
        E=$(tput sgr0)
        B=$(tput sgr0)
        R=$(tput sgr0)
    fi
}

VT220(?) non-portable

The non-portable way of handling this is as follows (but most terminals use this set of escape codes).

ESC='\033'
RED="${ESC}[31m"
GREEN="${ESC}[32m"
RESET="${ESC}[0m"

echo "\
${RED}red\
${GREEN}green\
${RESET}reset"