LINUX.ORG.RU

кажется, вот рабочий вариант, не знаю на сколько правильный

#!/bin/bash

GREEN='\033[1;32m'
RED='\033[1;31m'
COL='\033[0m'

command > >(printf "$GREEN%s$COL\n" "$(< /dev/stdin)") \
 2> >(printf "$RED%s$COL\n" "$(< /dev/stdin)" >&2)
teod0r ★★★★★ ()

Можно включить для всего скрипта вот так:

#!/bin/bash
exec 2> >(sed $'s/^.*$/\033[1;31m\\0\033[0m/') # порядок важен
exec > >(sed $'s/^.*$/\033[1;32m\\0\033[0m/')

echo abc
ls /not-exist
legolegs ★★★★★ ()