Захотел я как-то украсить скрипт, ну чтоб он не был таким скучным, и подумал — в DOS можно было красить консоль, а можно ли в Linux? Можно!
tput
— команда, в основном предназначающаяся для управления консольным курсором, но покрасить она тоже может, хоть и довольно хреново.
Общий синтаксис:
tput <команда> <параметры>
В нашем случае, интересуют команды, изменяющие цвет или стиль текста.
Для удобства сведу их в таблицу:
Команда tput | Действие |
bold | Жирный текст, после вызова команды |
smul | Начало подчеркнутого текста |
rmul | Конец подчеркнутого текста |
rev | Реверс текста и фона, т.е. они меняются местами |
blink | Мигающий текст (не на одной консоли не сработал) |
invis | Невидимый текст (у меня не сработало) |
smso | Некий «выдающийся» (standout) режим, отличий при выводе не заметил |
rmso | Отключить «выдающийся» режим |
setaf <код_цвета> | Установить цвет текста |
setab <код_цвета> | Установить цвет фона |
sgr0 | Сбросить настройки терминала к значениям по умолчанию. |
tput
, на самом деле, плох для окраски текста консоли, но зато хорош в синтаксисе. Не надо сочинять дополнительных функций для ESC-последовательностей (о них в следующей заметке), но он поддерживает только 7 основных цветов, а на некоторых консолях не срабатывает и белый цвет. Вот таблица цветов для текста и фона (значения одинаковые и для того, и для другого):Код цвета | Цвет |
0 | Черный (Black) |
1 | Красный (Red) |
2 | Зеленый (Green) |
3 | Желтый (Yellow) |
4 | Голубой (Blue) |
5 | Фиолетовый (Magenta) |
6 | Светло-голубой (Cyan) |
7 | Белый (White), у меня почему-то не сработал. |
8 | Не используется |
9 | Возврат к цвету по умолчанию |
Я написал тестовый скрипт, где последовательно перебираю цвета текста и цвета фона:
tput setaf <код_цвета>
, для текста
tput setab <код_цвета>
, для фона
потом echo -n "некий текст"
, где некий текст
— наименование цветов в массиве, см. исходник.
А потом вызываю tput sgr0
, чтобы сбросить консоль.
Стили текста:
echo "Text style:"
tput bold; echo "Bold"; tput sgr0
tput smul; echo "Underlined"; tput rmul
tput rev; echo "Reversed"; tput sgr0
tput blink; echo "Blinking"; tput sgr0
tput invis; echo "Invisible"; tput sgr0
tput smso; echo "Standout"; tput rmso
tput sgr0
tput, на буржуйском. Копия в PDF