Введение
Ассоциация echo
команда выводит заданную строку в стандартная выходная труба, обычно указывая на терминал. Хотя стандартный канал вывода может указывать на другие интерфейсы — echo
Команда обычно используется для печати и отображения сообщений в терминале. По умолчанию текст отображаемого сообщения наследует цвет другого текста в терминале (который сам по себе настраивается). Однако есть несколько способов изменить цвет вывода echo
– как для отдельных строк, так и для целых сообщений.
В этом кратком руководстве мы рассмотрим, как можно изменить цвет вывода
echo
в системах на базе Linux с использованием escape-кодов ANSI,tput
и как сделать этот процесс менее подробным в сценариях Bash.
Изменение цвета вывода с помощью управляющих кодов ANSI
Самый простой способ изменить цвет — использовать управляющие последовательности/коды ANSI. Все escape-коды ANSI начинаются с Escape
символ, который может быть представлен в различных форматах – 27
в десятичном виде, x1B
в шестнадцатеричном формате, как ключ управления ^[
или 33
в восьмеричном формате. Затем за последовательностями следует команда:
33[command
Где открывающая скобка (Интродукция последовательности управления) является необязательным, но помогает отделить команду от escape-символа. Когда вы ставите цветовой код как команда меняет цвет встречного текста:
33[0;34
0;34
это код для синего цвета, например. Только с этим вы можете изменить цвет текста в echo
с:
33[0;34Text
где Text
будет окрашен в синий цвет. В качестве альтернативы рассмотрите простой скрипт bash для печати "Добро пожаловать во Францию" в цветах французского флага:
#!/bin/bash
BLUE='33[0;34m'
WHITE= '33[0;37m'
RED= '33[0;31m'
echo -e "${Blue}Welcome ${WHITE}to ${RED}France"
Необязательный -e
флаг echo
Команда позволяет использовать специальные символы, такие как n
(новая строка) и t
(табуляция) внутри входной строки.
Как только вы запустите скрипт:
$ ./colors.sh
Это приводит к:
Коды ANSI не ограничиваются цветом, но могут применяться и для стиля. Коды 0..9
представляют стили текста, а коды 30...37
представлять цвета:
Цвет | Коды | Текстовые стили | Коды |
Черный | 30 | Простой текст | 0 |
Red | 31 | Жирный текст | 1 |
Зелёная | 32 | Текст низкой интенсивности | 2 |
Коричневый / Оранжевый | 33 | Подчеркнуть текст | 4 |
Синии | 34 | Мигающий текст | 5 |
Purple | 35 | Невидимый текст | 8 |
Голубой | 36 | Зачеркнутый текст | 9 |
Светло-серый | 37 |
Давайте создадим сценарий bash, чтобы изучить некоторые из этих параметров:
#!/bin/bash
echo -e "33[0;33mSample text"
echo -e "33[1;33mBold text"
echo -e "33[2;33mLow intensity text"
echo -e "33[4;33mUnderline text"
echo -e "33[5;33mBlinking text"
echo -e "33[8;33mInvisible text"
echo -e "33[9;33mStrikethrough text"
Запуск этого скрипта приводит к:
Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!
Точно так же вы можете изменить цвет фона этих текстов, используя коды 40..47
:
цвет | Коды |
Черный | 40 |
Red | 41 |
Зелёная | 42 |
Коричневый / Оранжевый | 43 |
Синии | 44 |
Purple | 45 |
Голубой | 46 |
Светло-серый | 47 |
Изменение фона заданной строки сводится к тому же правилу, что и изменение цвета шрифта — код сам меняет поведение:
#!/bin/bash
BLUE='33[0;44m'
BLACK='33[0;30m'
WHITE='33[0;30;47m'
RED='33[0;41m'
echo -e "${BLUE}Welcome ${WHITE}to ${RED}France"
Примечание: Как правило, вы можете преобразовать цвета шрифта в цвета фона, добавив 10. 30
черный цвет шрифта, 40
черный цвет фона.
Измените цвет вывода с помощью tput
Альтернативой кодам ANSI является использование tput
команда:
$ tput setaf color_code
setf
позволяет использовать 8 цветов, а setaf
позволяет использовать 256 цветов, поэтому в зависимости от используемой команды вы можете переключаться между 0..7
и 0..255
как цветовые коды. Оба формата команды посвящают 0..7
к тем же цветовым кодам, в то время как с setaf
, 8..15
цвета высокой интенсивности и 16..231
разные оттенки первых 8, и 232..255
оттенки серого:
Кредит: Википедия.
Наконец, tput
также позволяет изменить цвет фона, добавить жирный шрифт, уменьшить интенсивность и т. д. с помощью других команд:
Текстовые стили | Команды |
Цвет переднего плана | сетаф |
Фоновый цвет | сетаб |
Нет стиля | сгв0 |
Жирный текст | булавка |
Текст низкой интенсивности | Солнце |
Подчеркнуть текст | смул |
Мигающий текст | мигать |
Обратный текст | оборот |
Давайте создадим еще один скрипт, который использует tput
изменить цвет вывода echo
:
#!/bin/bash
YELLOW=`tput setaf 3`
echo "${YELLOW}Changing"
WHITE=`tput setaf 7 bold`
echo "${WHITE}Colors"
BLUE=`tput setaf 4 smul`
echo "${BLUE}With tput"
CYAN=`tput setaf 6 blink`
echo "${CYAN}is less"
RED=`tput setab 1 setaf 7`
echo "${RED}verbose!"
Этот скрипт напечатает в терминале следующий вывод:
Команда tput обеспечивает простой способ печати любого цвета с помощью простого цветового кода. Теперь давайте создадим скрипт, который может печатать каждый цветовой код, доступный для команды tput:
#!/bin/bash
tput init
end = $ (($ (tput colors) - 1))
w = 1
for c
in $ (seq 0 $end)
do
eval "$(printf " tput setaf % 3 s " " $c ")"
echo - n "$_"
[[$c - ge $ ((w * 2))]]
offset = 2 || offset = 0
[[$ (((c + offset) % (w - offset))) - eq $ (((w - offset) - 1))]]
echo
done
tput init
Он будет печатать от 0 до 255 цветов и их коды:
Заключение
В этом кратком руководстве мы рассмотрели, как можно изменить цвет echo
вывод в Linux — с использованием Escape-последовательностей ANSI и tput
команда.
Мы также рассмотрели, как сделать процесс менее подробным, используя переменные Bash, настроить цвета фона и стиль текста.