ОС

Как изменить цвет вывода echo в терминале Linux

Как вывести цветной текст командой echo в Linux: ANSI коды цвета, примеры с echo -e, printf, таблица цветов. Советы по совместимости и отладке для терминала Bash, zsh.

Как изменить цвет вывода команды echo в Linux

Я пытаюсь вывести текст красным цветом в терминале с помощью команды echo. Как это можно сделать?

Цвет текста в терминале Linux меняют с помощью ANSI‑escape‑последовательностей (ANSI коды цвета): например echo -e "\033[31mКрасный текст\033[0m" выведет строку красным. Для скриптов надёжнее использовать printf или bash‑синтаксис $'…': printf '\033[31m%s\033[0m\n' "Красный". Код 31 — красный для foreground, \033[0m сбрасывает форматирование.


Содержание


Как изменить цвет текста в терминале — короткий пример

Самый простой способ вывести красный текст в терминал — вставить ANSI‑escape последовательность перед текстом и сбросить цвет в конце. Примеры работают в большинстве терминалов (xterm, GNOME Terminal, Konsole и т.д.):

bash
# вариант с echo (bash/zsh, может потребоваться -e)
echo -e "\033[31mЭто красный текст\033[0m"

# bash-специфичный вариант с $'...'
echo $'\e[31mЭто красный текст\e[0m'

# более переносимый вариант — printf
printf '\033[31m%s\033[0m\n' "Это красный текст"

Коротко: \033 (или \e) — это ESC, 31m — код красного цвета для foreground, а \033[0m — сброс всех атрибутов. Более подробные примеры и объяснения есть в статьях и справочниках по ANSI‑кодам цвета на Habr и в руководствах по Bash (см. ссылки внизу).


Как работают ANSI коды цвета

Формат команды: ESC [ параметры m. ESC — это символ с кодом 27, который в текстах часто пишут как \033, \e или \x1b. Параметры разделяются точкой с запятой и задают атрибуты, цвет текста и цвет фона. Пример комбинирования: \033[1;31;43m — полужирный красный текст на жёлтом фоне.

Общие параметры:

  • 0 — сброс (reset).
  • 1 — жирный (bold).
  • 4 — подчеркивание (underline).
  • 30–37 — основные цвета foreground.
  • 40–47 — основные цвета background.
  • 90–97 — яркие (high intensity) foreground.
  • 100–107 — яркие background.

Таблицы и примеры форматов подробно описаны в справочниках по ANSI‑кодам; полезная сводка есть на Wikilinux и в статьях на linux-console.


Примеры: echo и printf (красный текст)

Разные способы, с пояснениями:

  1. echo с интерпретацией escape-последовательностей (не всегда переносимо):
bash
echo -e "\033[31mОшибка:\033[0m файл не найден"
  1. bash‑подход с $'…' (удобно в интерактивной оболочке):
bash
echo $'\e[31mОшибка:\e[0m файл не найден'
  1. printf — надёжнее для скриптов:
bash
printf '\033[0;31m%s\033[0m\n' "Ошибка: файл не найден"
  1. Использование переменных для читаемости:
bash
RED='\033[0;31m'
RESET='\033[0m'
printf "%b\n" "${RED}Ошибка:${RESET} файл не найден"

Функция для логов:

bash
log_error() { printf '\033[0;31mERROR:\033[0m %s\n' "$1"; }
log_error "Непредвиденная ошибка"

Если нужна документация и примеры — посмотрите статью на IT is good и практические примеры на mb4.ru.


Список цветов и соответствующие коды

Ниже — быстрый справочник по основным кодам.

Цвет (foreground) Код FG Код BG (background)
Чёрный 30 40
Красный 31 41
Зелёный 32 42
Жёлтый 33 43
Синий 34 44
Пурпурный (фиолетовый) 35 45
Голубой (cyan) 36 46
Белый (серый) 37 47
Яркий чёрный (тёмно‑серый) 90 100
Ярко‑красный 91 101
Ярко‑зелёный 92 102
Ярко‑жёлтый 93 103
Ярко‑синий 94 104
Ярко‑пурпурный 95 105
Ярко‑голубой 96 106
Ярко‑белый 97 107

Примеры комбинаций:

  • \033[31m — красный текст.
  • \033[41m — красный фон.
  • \033[1;31m — жирный красный текст.
  • \033[31;43m — красный текст на жёлтом фоне.
    Подробную таблицу и примеры можно найти на Habr и в руководствах по Bash.

Практические советы и совместимость

  • echo vs printf: echo -e работает в bash и zsh, но не гарантированно в sh/dash — для скриптов лучше printf. См. примеры в статье на Habr.
  • Проверка, что вывод идёт в терминал: если скрипт может быть запущен с перенаправлением, отключайте цвета, когда stdout не tty:
bash
if [ -t 1 ]; then RED='\033[0;31m'; RESET='\033[0m'; else RED=''; RESET=''; fi
printf "%b\n" "${RED}Сообщение${RESET}"
  • Просмотр цветного вывода в less: используйте less -R, чтобы увидеть управляющие последовательности как цвет.
  • Терминал поддерживает разные режимы: 8/16 цветов, 256 цветов и truecolor. Для 256‑цветов используют \x1b[38;5;Nm (foreground) и для 24‑бит RGB — \x1b[38;2;R;G;Bm (это более продвинутые варианты; поддержка зависит от терминала).
  • Для переносимости можно применять tput (терминфо) — он скрывает детали терминала: color=$(tput setaf 1); reset=$(tput sgr0); printf '%s%s%s\n' "$color" "Текст" "$reset".

Частые ошибки и отладка

  • Коды печатаются как обычный текст (видите \033[31m в выводе)? Значит, escape-последовательности не интерпретируются. Решение: используйте printf, $'...' или echo -e в оболочке, где он поддерживается.
  • Цвет не возвращается к норме? Не забывайте добавить \033[0m в конце.
  • Скрипт запускается под sh и echo -e не работает — используйте printf.
  • Цвета исчезают при перенаправлении в файл — это нормально, escape‑последовательности попадают в файл. Для записи без кодов уберите ANSI‑последовательности или отключите их в скрипте, если stdout не tty.
  • Не видите цвет в less? Запускайте less -R или экспортируйте LESS=-R.
    Если нужно пошагово проверить, как оболочка трактует аргументы, попробуйте printf '%s\n' "$VAR" и экспериментируйте с %b/%s.

Источники

  1. Цветной вывод текста командой echo в Bash — mb4.ru
  2. Как изменить цвет текста в терминале Linux — Habr
  3. Изменение цвета вывода команды echo – IT is good
  4. Как изменить цвет вывода эха в Bash — Linux Console
  5. Bash. Часть 5. Управление цветом — Wikilinux

Заключение

Для управления цветом текста в терминале используйте ANSI‑escape‑последовательности — это стандартный способ для цвета текста в терминале Linux. Быстрый вариант: echo -e "\033[31mТекст\033[0m", но для надёжности и переносимости в скриптах лучше применять printf или bash‑синтаксис $'…'. Запомните: 31 — красный, \033[0m — сброс; всегда проверяйте поддержку терминала и отключайте цвета при перенаправлении вывода.

Авторы
Проверено модерацией
Модерация
Как изменить цвет вывода echo в терминале Linux