Цветом символов можно управлять, посылая эмулятору терминала экранированные последовательности ANSI внутри потока символов, предназначенных для вывода на экран. Экранированные последовательности не «выводятся» на экран; они интерпретируются терминалом как инструкции. Как показано в табл. 13.1, для включения непечатаемых символов используются последовательности \[ и \]. Экранированные последовательности ANSI начинаются с восьмеричного кода 033 (код, генерируемый клавишей ESC), за которым следует необязательный атрибут символа и инструкция. Например, вот как выглядит код, определяющий текст как простой (атрибут = 0), черного цвета \033[0;30m.
В табл. 13.2 перечислены поддерживаемые цвета текста. Обратите внимание, что цвета делятся на две группы, отличаясь наличием атрибута жирного текста (1), из-за которого возникает впечатление более «светлых» (light) цветов.
Таблица 13.2. Экранированные последовательности, используемые для определения цвета текста
Последовательность | Цвет |
\033[0;30m | Черный |
\033[0;31m | Красный |
\033[0;32m | Зеленый |
\033[0;33m | Коричневый |
\033[0;34m | Синий |
\033[0;35m | Пурпурный |
\033[0;36m | Бирюзовый |
\033[0;37m | Светло-серый |
\033[1;30m | Темно-серый |
\033[1;31m | Светло-красный |
\033[1;32m | Светло-зеленый |
\033[1;33m | Желтый |
\033[1;34m | Светло-синий |
\033[1;35m | Светло-пурпурный |
\033[1;36m | Светло-бирюзовый |
\033[1;37m | Белый |
Давайте попробуем окрасить строку приглашения в красный цвет (здесь она выглядит как серая). Добавьте в начало экранированную последовательность:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$ "
$
Получилось, но обратите внимание, что весь текст, который вводится с клавиатуры вслед за строкой приглашения, также окрашивается в красный цвет. Для устранения этого эффекта добавьте еще одну экранированную последовательность в конец определения приглашения — этим вы сообщите эмулятору терминала, что тот должен восстановить нормальный цвет:
$ PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\] "
$
Так лучше!
Кроме того, существует возможность изменить цвет фона, для чего предназначены экранированные последовательности, перечисленные в табл. 13.3. Цвет фона не поддерживает атрибут жирного текста.
Таблица 13.3. Экранированные последовательности, используемые для определения цвета фона
Последовательность | Цвет |
\033[0;40m | Черный |
\033[0;41m | Красный |
\033[0;42m | Зеленый |
\033[0;43m | Коричневый |
\033[0;44m | Синий |
\033[0;45m | Пурпурный |
\033[0;46m | Бирюзовый |
\033[0;47m | Светло-серый |
Чтобы вывести приглашение на красном фоне, достаточно изменить первую экранированную последовательность:
$ PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\] "