Как изменить цвет вывода эха в Linux - PullRequest
1458 голосов
/ 10 мая 2011

Я пытаюсь напечатать текст в терминале с помощью команды echo.

Я хочу напечатать текст красным цветом.Как я могу это сделать?

Ответы [ 24 ]

1964 голосов
/ 10 мая 2011

Вы можете использовать эти коды выхода ANSI :

Black        0;30     Dark Gray     1;30
Red          0;31     Light Red     1;31
Green        0;32     Light Green   1;32
Brown/Orange 0;33     Yellow        1;33
Blue         0;34     Light Blue    1;34
Purple       0;35     Light Purple  1;35
Cyan         0;36     Light Cyan    1;36
Light Gray   0;37     White         1;37

И затем использовать их в своем сценарии следующим образом:

#    .---------- constant part!
#    vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"

, который печатает love

Из комментария @ james-lim, , если вы используете команду echo, обязательно используйте флаг -e, чтобы разрешить экранирование обратной косой черты .

# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"

(не добавляйте "\n" при использовании echo, если вы не хотите добавлять дополнительную пустую строку)

836 голосов
/ 08 января 2014

Вы можете использовать команду awesome tput (предложенную в ответ Игнасио ), чтобы создать коды управления терминалом для всех видов вещей.


Использование

Конкретные подкоманды tput обсуждаются позже.

Direct

Вызовите tput как часть последовательности команд:

tput setaf 1; echo "this is red text"

Используйте ; вместо &&, поэтому, если tput выдает ошибку, текст все равно будет отображаться.

Переменные оболочки

Другой вариант - использовать переменные оболочки:

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"

tput создает последовательности символов, которые интерпретируются терминалом как имеющие особое значение. Они не будут показаны сами. Обратите внимание, что они все еще могут быть сохранены в файлы или обработаны как входные данные программами, отличными от терминала.

Подстановка команд

Может быть удобнее вставить вывод tput непосредственно в строки echo, используя подстановку команд :

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"

* * Пример 1 040 * +1041 *

Приведенная выше команда производит это в Ubuntu:

Screenshot of colour terminal text


Команды цвета переднего плана и фона

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape

Цвета следующие:

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    magenta   COLOR_MAGENTA   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1

Существуют также не-ANSI версии функций настройки цвета (setb вместо setab и setf вместо setaf), в которых используются другие числа, не приведенные здесь.

Команды текстового режима

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode

Команды перемещения курсора

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal

Очистить и вставить команды

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines

Другие команды

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell

При compiz колеблющихся окнах команда bel заставляет терминал на секунду колебаться, чтобы привлечь внимание пользователя.


Сценарии

tput принимает сценарии, содержащие одну команду на строку, которые выполняются по порядку до выхода tput.

Избегайте временных файлов, повторяя многострочную строку и передавая ее по конвейеру:

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red

Смотри также

  • См. man 1 tput
  • См. man 5 terminfo для полного списка команд и более подробной информации об этих параметрах. (Соответствующая команда tput указана в столбце Cap-name огромной таблицы, начинающейся со строки 81.)
643 голосов
/ 09 марта 2015

некоторые переменные, которые вы можете использовать:

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White

image

the escape character in bash, hex and octal respectively:

|       | bash  | hex    | octal   | NOTE                         |
|-------+-------+--------+---------+------------------------------|
| start | \e    | \x1b   | \033    |                              |
| start | \E    | \x1B   | -       | x cannot be capital          |
| end   | \e[0m | \x1m0m | \033[0m |                              |
| end   | \e[m  | \x1b[m | \033[m  | 0 is appended if you omit it |
|       |       |        |         |                              |

short example:

| color       | bash         | hex            | octal          | NOTE                                  |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m | \x1b[32m | \033[32m | m is NOT optional                     |
| reset       | \e[0m  | \1xb[0m  | \033[om  | o is optional (do it as best practice |
|             |              |                |                |                                       |

bash exception:

If you are going to use these codes in your special bash variables

  • PS0
  • PS1
  • PS2 (= this is for prompting)
  • PS4

you should add extra escape characters so that может интерпретировать их правильно.Без добавления дополнительных escape-символов это работает, но вы будете сталкиваться с проблемами, когда будете использовать Ctrl + r для поиска в своей истории.

правило исключения для bash

Вы должны добавить \[ перед любым запускомКод ANSI и добавьте \] после любых конечных.
Пример:
при обычном использовании: \033[32mThis is in green\033[0m
для PS0 / 1/2/4: \[\033[32m\]This is in green\[\033[m\]

\[ предназначен для начала последовательности непечатаемых символов
\] предназначен для конца последовательности непечатаемых символов

Совет: длязапомни его, сначала добавь \[\], а затем вставь между ними свой код ANSI:
- \[start-ANSI-code\]
- \[end-ANSI-code\]

тип цветовой последовательности:

  1. 3/4 ​​бит
  2. 8 бит
  3. 24 бит

Перед тем, как погрузиться в эти цвета, вы должны знать о 4 режимах с этими кодами:

1.color-mode

Изменяет стиль цвета, а не текста.Например, сделать цвет ярче или темнее.

  • 0 сброс
  • 1; светлее, чем обычно
  • 2; темнее, чем обычно

Этот режим неподдерживается широко.Он полностью поддерживает Gnome-Terminal.

2.текстовый режим

Этот режим предназначен для изменения стиля текста, а не цвета.

  • 3; курсив
  • 4; подчеркивание
  • 5; мигает (медленно)
  • 6; мигает (быстро)
  • 7; реверс
  • 8; скрыть
  • 9; вычеркивание

и почти поддерживаются.
НапримерKDE-Konsole поддерживает 5;, а Gnome-Terminal - нет, а Gnome поддерживает 8;, а KDE - нет.

3.режим переднего плана

Этот режим предназначен для раскрашивания переднего плана.

4.Режим фона

Этот режим предназначен для раскрашивания фона.

image

The below table shows a summary of 3/4 bit version of ANSI-color

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| color-mode | octal    | hex     | bash  | description      | example (= in octal)         | NOTE                                 |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          0 | \033[0m  | \x1b[0m | \e[0m | reset any affect | echo -e "\033[0m"            | 0m equals to m                       |
|          1 | \033[1m  |         |       | light (= bright) | echo -e "\033[1m####\033[m"  | -                                    |
|          2 | \033[2m  |         |       | dark (= fade)    | echo -e "\033[2m####\033[m"  | -                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|  text-mode | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          3 | \033[3m  |         |       | italic           | echo -e "\033[3m####\033[m"  |                                      |
|          4 | \033[4m  |         |       | underline        | echo -e "\033[4m####\033[m"  |                                      |
|          5 | \033[5m  |         |       | blink (slow)     | echo -e "\033[3m####\033[m"  |                                      |
|          6 | \033[6m  |         |       | blink (fast)     | ?                            | not wildly support                   |
|          7 | \003[7m  |         |       | reverse          | echo -e "\033[7m####\033[m"  | it affects the background/foreground |
|          8 | \033[8m  |         |       | hide             | echo -e "\033[8m####\033[m"  | it affects the background/foreground |
|          9 | \033[9m  |         |       | cross            | echo -e "\033[9m####\033[m"  |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| foreground | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         30 | \033[30m |         |       | black            | echo -e "\033[30m####\033[m" |                                      |
|         31 | \033[31m |         |       | red              | echo -e "\033[31m####\033[m" |                                      |
|         32 | \033[32m |         |       | green            | echo -e "\033[32m####\033[m" |                                      |
|         33 | \033[32m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[32m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[32m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple  |
|         36 | \033[32m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[32m |         |       | white            | echo -e "\033[37m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         38 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| background | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         40 | \033[40m |         |       | black            | echo -e "\033[40m####\033[m" |                                      |
|         41 | \033[41m |         |       | red              | echo -e "\033[41m####\033[m" |                                      |
|         42 | \033[42m |         |       | green            | echo -e "\033[42m####\033[m" |                                      |
|         43 | \033[43m |         |       | yellow           | echo -e "\033[43m####\033[m" |                                      |
|         44 | \033[44m |         |       | blue             | echo -e "\033[44m####\033[m" |                                      |
|         45 | \033[45m |         |       | purple           | echo -e "\033[45m####\033[m" | real name: magenta = reddish-purple  |
|         46 | \033[46m |         |       | cyan             | echo -e "\033[46m####\033[m" |                                      |
|         47 | \033[47m |         |       | white            | echo -e "\033[47m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         48 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

image

The below table shows a summary of 8 bit version of ANSI-color

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 | \033[38;5 | \x1b[38;5 | \e[38;5 | standard. normal | echo -e '\033[38;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[38;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[38;5;45m####\033[m'  | has no specific pattern |
|    232-255 |           |           |         |                  | echo -e '\033[38;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 |           |           |         | standard. normal | echo -e '\033[48;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[48;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[48;5;45m####\033[m'  |                         |
|    232-255 |           |           |         |                  | echo -e '\033[48;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

The 8-bit fast test:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done

image

The below table shows a summary of 24 bit version of ANSI-color

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| foreground | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | R = red     | echo -e '\033[38;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | G = green   | echo -e '\033[38;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | B = blue    | echo -e '\033[38;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| background | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | R = red     | echo -e '\033[48;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | G = green   | echo -e '\033[48;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | B = blue    | echo -e '\033[48;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

image

some screen-shots

foreground 8-bit summary in a .gif

foreground.gif

фоновая 8-битная сводка в .gif

background.gif

сводка цветов с их значениями

enter image description here enter image description here enter image description here enter image description here

blinking на KDE-терминале

KDE-blinking

image a simple C code that shows you more

cecho_screenshot

image a more advanced tool that I developed to deal with these colors:

bline


съемка в цветном режиме

fade-normal-bright

съемка в текстовом режиме

only-text-mode

Комбинация в порядке

combine

больше снимков


Советы и рекомендации для опытных пользователей и программистов:

Можем ли мы использовать эти коды на языке программирования?

Да, вы можете.Я испытал в , , , ,

Они замедляют скорость программы?

Я думаю, НЕТ.

Можем ли мы использовать их в Windows?

3/4-бит Да, если вы компилируете код с gcc
некоторыми снимками экрана на Win-7

Как рассчитать длину кода?

\033[ = 2, другие части 1

Где мы можем использовать эти коды?

Везде, где есть tty интерпретатор
xterm, gnome-terminal, kde-terminal, mysql-client-CLI и т. Д.
Например, если вы хотите раскрасить вывод с помощью mysql, вы можете использовать Perl

#!/usr/bin/perl -n
print "\033[1m\033[31m$1\033[36m$2\033[32m$3\033[33m$4\033[m" while /([|+-]+)|([0-9]+)|([a-zA-Z_]+)|([^\w])/g;

сохраните этот код в имени файла: pcc (= Perl Colorize Character) и затем поместите файл в допустимый PATH, а затем используйте его где угодно.

ls | pcc
df | pcc

внутри mysql сначала зарегистрируйте его для pager, а затем попробуйте:

[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;

pcc

Он НЕ обрабатывает Unicode.

Разве эти коды только раскрашивают?

Нет, они могут делать много интересного.Попробуйте:

echo -e '\033[2K'  # clear the screen and do not move the position

или:

echo -e '\033[2J\033[u' # clear the screen and reset the position

Многие новички хотят очистить экран с помощью system( "clear" ), поэтому вы можете использовать это вместо system(3) call

Они доступны в Юникоде?

Да. \u001b

Какой вариант этих цветов предпочтительнее?

Легко использовать 3/4-bit, но гораздо точнее и красивее использовать 24-bit.
Если у вас нет опыта работы с , вот краткое руководство:
24 бита означают: 00000000 и 00000000 и 00000000. Каждый 8-бит предназначен для определенного цвета.
1..8 для image и 9..16 для image и 17..24 для image
Таким образом, #FF0000 означает image и вот оно: 255;0;0
в #00FF00 означает image, что здесь: 0;255;0
Имеет ли это смысл? какой цвет вы хотите объединить с этими тремя 8-битными значениями.


справка:
Википедия
escape-последовательности ANSI
tldp.org
tldp.org
misc.flogisoft.com
некоторые блоги / веб-страницы, которые я не помню

176 голосов
/ 10 мая 2011

Используйте tput с возможностью setaf и параметром 1.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"
111 голосов
/ 10 мая 2011
echo -e "\033[31m Hello World"

[31m управляет цветом текста:

  • 30 - 37 устанавливает передний план цвет
  • 40 -47 комплекты фон цвет

Более полный список цветовых кодов можно найти здесь .

Это хорошая практика длясбросьте цвет текста обратно на \033[0m в конце строки.

31 голосов
/ 25 февраля 2015

Это цветной переключатель \033[.См. история .

Цвет коды подобны 1;32 (светло-зеленый), 0;34 (синий), 1;34 (Светло-синий) и т. Д.

Мы заканчиваем цветовые последовательности переключателем цвета \033[ и 0m, цветным кодом no .Так же, как открытие и закрытие вкладок на языке разметки.

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"

Простое цветовое решение echo:

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"
27 голосов
/ 11 апреля 2014

Удобный способ изменить цвет только для одного echo - определить такую ​​функцию:

function coloredEcho(){
    local exp=$1;
    local color=$2;
    if ! [[ $color =~ '^[0-9]$' ]] ; then
       case $(echo $color | tr '[:upper:]' '[:lower:]') in
        black) color=0 ;;
        red) color=1 ;;
        green) color=2 ;;
        yellow) color=3 ;;
        blue) color=4 ;;
        magenta) color=5 ;;
        cyan) color=6 ;;
        white|*) color=7 ;; # white or invalid color
       esac
    fi
    tput setaf $color;
    echo $exp;
    tput sgr0;
}

Использование:

coloredEcho "This text is green" green

Или вы можете напрямую использовать цветовые коды, упомянутые в Ответ Дрю :

coloredEcho "This text is green" 2
21 голосов
/ 04 апреля 2017

Используйте tput для расчета цветовых кодов.Избегайте использования escape-кода ANSI (например, \E[31;1m для красного), потому что он менее переносим.Bash на OS X, например, не поддерживает его.

BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
MAGENTA=`tput setaf 5`
CYAN=`tput setaf 6`
WHITE=`tput setaf 7`

BOLD=`tput bold`
RESET=`tput sgr0`

echo -e "hello ${RED}some red text${RESET} world"
19 голосов
/ 25 ноября 2018

Я только что объединил хорошие уловки во всех решениях и в итоге получил:

cecho(){
    RED="\033[0;31m"
    GREEN="\033[0;32m"
    YELLOW="\033[1;33m"
    # ... ADD MORE COLORS
    NC="\033[0m" # No Color

    printf "${!1}${2} ${NC}\n"
}

И вы можете просто назвать его как:

cecho "RED" "Helloworld"
18 голосов
/ 21 сентября 2017

На этот вопрос снова и снова отвечали :-), но почему бы и нет.

Первое использование tput в современных условиях более переносимо, чем ручное введение кодов ASCII через echo -E

Вот быстрая функция bash:

 say() {
     echo "$@" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\4@reset/g" \
             -e "s/@red/$(tput setaf 1)/g" \
             -e "s/@green/$(tput setaf 2)/g" \
             -e "s/@yellow/$(tput setaf 3)/g" \
             -e "s/@blue/$(tput setaf 4)/g" \
             -e "s/@magenta/$(tput setaf 5)/g" \
             -e "s/@cyan/$(tput setaf 6)/g" \
             -e "s/@white/$(tput setaf 7)/g" \
             -e "s/@reset/$(tput sgr0)/g" \
             -e "s/@b/$(tput bold)/g" \
             -e "s/@u/$(tput sgr 0 1)/g"
  }

Теперь вы можете использовать:

 say @b@green[[Success]] 

чтобы получить:

Bold-Green Success

Примечания о переносимости tput

Первый раз tput(1) исходный код был загружен в сентябре 1986

tput(1) был доступен в семантике X / Open curses в 1990-х (стандарт 1997 имеет семантику, упомянутую ниже).

Итак, это ( довольно ) вездесущий.

...