Командная строка Linux - Шоттс Уильям Страница 38
Командная строка Linux - Шоттс Уильям читать онлайн бесплатно
Цветом символов можно управлять, посылая эмулятору терминала экранированные последовательности 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
Белый
Давайте попробуем окрасить строку приглашения в красный цвет (здесь она выглядит как серая). Добавьте в начало экранированную последовательность:
<[email protected] ~>$ PS1="\[\033[0;31m\]<\[email protected]\h \W>\$ "
<[email protected] ~>$
Получилось, но обратите внимание, что весь текст, который вводится с клавиатуры вслед за строкой приглашения, также окрашивается в красный цвет. Для устранения этого эффекта добавьте еще одну экранированную последовательность в конец определения приглашения — этим вы сообщите эмулятору терминала, что тот должен восстановить нормальный цвет:
<[email protected] ~>$ PS1="\[\033[0;31m\]<\[email protected]\h \W>\$\[\033[0m\] "
<[email protected] ~>$
Так лучше!
Кроме того, существует возможность изменить цвет фона, для чего предназначены экранированные последовательности, перечисленные в табл. 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
Светло-серый
Чтобы вывести приглашение на красном фоне, достаточно изменить первую экранированную последовательность:
<[email protected] ~>$ PS1="\[\033[0;41m\]<\[email protected]\h \W>\$\[\033[0m\] "
<[email protected] ~>$
Попробуйте другие цвета и посмотрите, что из этого получится!
ПРИМЕЧАНИЕ
Помимо атрибутов символов нормального (0) и жирного (1) текста, есть также атрибут подчеркивания (4), мигания (5) и инверсии (7). В целях воспитания хорошего вкуса многие эмуляторы терминалов не поддерживают атрибут мигания.
Перемещение курсора
Экранированные последовательности можно использовать для позиционирования курсора. Этот прием часто используется для отображения времени или другой информации в разных местах на экране, например вверху, при каждом выводе приглашения к вводу. В табл. 13.4 перечислены экранированные последовательности, управляющие позицией курсора.
Таблица 13.4. Экранированные последовательности, управляющие позицией курсора
Последовательность
Действие
\033[l;cH
Перемещает курсор в строку l и позицию c
\033[nA
Перемещает курсор вверх на n строк
\033[nB
Перемещает курсор вниз на n строк
\033[nC
Перемещает курсор вперед на n символов
\033[nD
Перемещает курсор назад на n символов
\033[2J
Очищает экран и помещает курсор в левый верхний угол (строка 0, позиция 0)
\033[K
Очищает экран от позиции курсора до конца текущей строки
\033[s
Сохраняет текущую позицию курсора
\033[u
Восстанавливает сохраненную позицию курсора
Используя эти коды, можно сконструировать строку приглашения, рисующую красный прямоугольник с часами в верхней части экрана (время отображается желтым цветом). Код, определяющий строку приглашения, на этот раз выглядит немного устрашающе:
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\[email protected]\h \W>\$ "
В табл. 13.5 приведены отдельные части этого определения, они помогут понять, как это работает.
Таблица 13.5. Экранированные последовательности, управляющие позицией курсора
Последовательность
Действие
\[
Начинает последовательность непечатаемых символов. Истинное назначение этой последовательности — позволить bash правильно вычислить длину строки приглашения на экране. Без этого функция редактирования командной строки неправильно позиционировала бы курсор
\033[s
Сохраняет позицию курсора. Это необходимо, чтобы вернуться в местоположение строки приглашения после вывода прямоугольника с часами в верхней части экрана. Будьте внимательны: некоторые эмуляторы терминалов не поддерживают эту последовательность
\033[0;0H
Перемещает курсор в левый верхний угол, в строку 0, позицию 0
\033[0;41m
Устанавливает красный цвет фона
\033[K
Очищает экран от текущей позиции курсора (в левом верхнем углу) до конца строки. Поскольку теперь установлен красный цвет фона, строка окрашивается в красный цвет. Обратите внимание, что последовательность очистки экрана до конца строки не изменяет позицию курсора, который остается в левом верхнем углу
\033[1;33m
Устанавливает желтый цвет текста
\t
Выводит текущее время. Хотя это «печатаемый» элемент, он находится в непечатаемом блоке строки приглашения, потому что нам не нужно, чтобы командная оболочка bash учитывала размер часов при расчете истинного размера отображаемой строки приглашения
\033[0m
Выключает цвет. Сбрасывает настройки цвета для текста и фона
\033[u
Восстанавливает позицию курсора, сохраненную ранее
\]
Завершает последовательность непечатаемых символов
<\[email protected]\h \W>\$
Строка приглашения
Сохранение определения приглашения
Я думаю, что мало у кого возникло желание вводить это монструозное определение каждый раз, поэтому нам нужно где-то сохранить строку приглашения. Сохранить определение можно в файле .bashrc. Для этого добавьте следующие две строки в файл:
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\[email protected]\h \W>\$ "
export PS1
Заключительное замечание
Хотите — верьте, хотите — нет, но со строкой приглашения можно творить чудеса, задействовав функции и сценарии, которые мы пока не рассматривали. Все, что было описано выше, — хорошее начало. Не все захотят возиться с изменением приглашения к вводу, оформление по умолчанию тоже выглядит неплохо. Но тем из вас, кому нравится копаться в мелочах, командная оболочка предоставляет возможность творчески провести несколько часов.
Часть III. Типичные задачи и основные инструменты
14. Управление пакетами
Жалоба
Напишите нам, и мы в срочном порядке примем меры.