Захотел я как-то украсить скрипт, ну чтоб он не был таким скучным, и подумал — в 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