Командная строка Linux. Полное руководство - Уильям Шоттс
Шрифт:
Интервал:
Закладка:
[[email protected] ~]$ echo $PS1
[[email protected]h W]$
ПРИМЕЧАНИЕ
Не волнуйтесь, если вы увидите нечто отличающееся от примера, приведенного выше. Все дистрибутивы Linux определяют приглашение к вводу по-своему, а некоторые содержат весьма экзотические определения.
Мы видим, что PS1 содержит несколько символов, например: квадратные скобки, знак @ и знак доллара, но все остальное — сплошная абракадабра. Наиболее догадливые из вас сразу поймут, что символы, экранированные слешем, — специальные символы, как те, что мы видели в табл. 7.2. В табл. 13.1 приводится неполный список символов, которые командная оболочка интерпретирует специальным образом в строке приглашения.
Таблица 13.1. Экранированные последовательности, используемые в строке приглашения
Последовательность
Отображаемое значение
a
Звонок. Заставляет компьютер издавать звуковой сигнал
d
Текущая дата в формате: день недели месяц число; например, «Mon May 26» (Пн Май 26)
h
Имя хоста локальной машины минус имя домена
H
Полное имя хоста
j
Число заданий, действующих в текущем сеансе
l
Имя текущего устройства терминала
n
Символ перевода строки
r
Возврат каретки
s
Имя программы командной оболочки
t
Текущее время в 24-часовом формате
T
Текущее время в 12-часовом формате
@
Текущее время в 12-часовом формате AM/PM
A
Текущее время в 24-часовом формате, часы:минуты
г
Имя пользователя
v
Номер версии командной оболочки
V
Номер версии и выпуска командной оболочки
w
Имя текущего рабочего каталога
W
Последняя часть в имени текущего рабочего каталога
!
Номер текущей команды в истории
#
Число команд, введенных в текущем сеансе командной оболочки
$
Выводит символ $, если пользователь не является суперпользователем, в противном случае выводит символ #
[
Отмечает начало последовательности из одного или нескольких непечатаемых символов. Используется для внедрения непечатаемых символов, управляющих поведением эмулятора терминала, например перемещает курсор или изменяет цвет текста
]
Отмечает конец последовательности непечатаемых символов
Альтернативные варианты оформления приглашения
Имея список специальных символов, можно попробовать изменить оформление приглашения. Для начала сохраните исходное определение, чтобы его можно было восстановить позднее. Для этого скопируйте значение переменной PS1 в другую переменную:
[[email protected] ~]$ ps1_old="$PS1"
Здесь создается новая переменная с именем ps1_old, и ей присваивается значение переменной PS1. Убедиться, что значение скопировано, можно с помощью команды echo:
[[email protected] ~]$ echo $ps1_old
[[email protected]h W]$
Это позволит вам в любой момент восстановить исходное оформление приглашения, выполнив обратную процедуру:
[[email protected] ~]$ PS1="$ps1_old"
Теперь, когда все готово, давайте посмотрим, что получится, если определить пустую строку приглашения:
[[email protected] ~]$ PS1=
Если определить приглашение как пустую строку, мы ничего не увидим. Строка приглашения просто исчезнет! В действительности она все еще существует, но поскольку она пустая, на экране ничего не отображается, — собственно, как мы и просили. Так как пустая строка приглашения дезориентирует, давайте определим минимальное оформление:
PS1="$ "
Так лучше. По крайней мере, теперь видно, где мы находимся. Обратите внимание на завершающий пробел внутри кавычек. Он обеспечивает дополнительное пространство на экране между знаком доллара и курсором.
Добавим в строку приглашения сигнал:
$ PS1="a$ "
Теперь при каждом выводе строки приглашения вы должны слышать короткий звуковой сигнал. Постоянно звучащий сигнал может раздражать, но в некоторых случаях он может быть полезен, например если нужно получать звуковое оповещение об удачном завершении долго выполняющихся команд.
А теперь попробуйте сделать приглашение более информативным, добавив имя хоста и время суток:
$ PS1="A h $ "
17:33 linuxbox $
Добавление времени суток может пригодиться, если есть необходимость зафиксировать, в какой момент закончилось выполнение задачи. Наконец, сделайте приглашение похожим на оригинальное:
17:37 linuxbox $ PS1="<[email protected]h W>$ "
<[email protected] ~>$
Попробуйте использовать другие последовательности из табл. 13.1 и посмотрите, сможете ли вы получить свою уникальную строку приглашения к вводу.
Добавление цвета
Большинство программ эмуляторов терминалов реагируют на некоторые последовательности непечатаемых символов, например управляющие атрибутами символов (такими, как цвет, жирность и мигание) и позицией курсора. О позиции курсора мы поговорим чуть позже, а сейчас займемся цветом.
недоразумения с терминаламиВ стародавние времена, когда дискеты были большими, а терминалы подключались к удаленным компьютерам, существовало великое многообразие моделей терминалов, и все они работали по-разному. Они имели разные клавиатуры и по-разному интерпретировали управляющую информацию. В Unix и в Unix-подобных системах имеются две очень сложные подсистемы (которые называются termcap и terminfo), решающие все проблемы, связанные с управлением терминалами. Если заглянуть в самые потаенные кладовые настроек эмулятора терминала, можно обнаружить параметр, определяющий тип эмулируемого терминала.
Чтобы заставить терминалы говорить на едином языке, Американский национальный институт стандартов (American National Standards Institute, ANSI) разработал набор последовательностей символов для управления видеотерминалами. Заслуженные пользователи DOS еще помнят файл ANSI.SYS, который применялся для интерпретации этих последовательностей.
Цветом символов можно управлять, посылая эмулятору терминала экранированные последовательности ANSI внутри потока символов, предназначенных для вывода на экран. Экранированные последовательности не «выводятся» на экран; они интерпретируются терминалом как инструкции. Как показано в табл. 13.1, для включения непечатаемых символов используются последовательности [ и ]. Экранированные последовательности ANSI начинаются с восьмеричного кода 033 (код, генерируемый клавишей ESC), за которым следует необязательный атрибут символа и инструкция. Например, вот как выглядит код, определяющий текст как простой (атрибут = 0), черного цвета 33[0;30m.
В табл. 13.2 перечислены поддерживаемые цвета текста. Обратите внимание, что цвета делятся на две группы, отличаясь наличием атрибута жирного текста (1), из-за которого возникает впечатление более «светлых» (light) цветов.
Таблица 13.2. Экранированные последовательности, используемые для определения цвета текста
Последовательность
Цвет
33[0;30m
Черный
33[0;31m
Красный
33[0;32m
Зеленый
33[0;33m
Коричневый
33[0;34m
Синий
33[0;35m
Пурпурный
33[0;36m
Бирюзовый
33[0;37m
Светло-серый
33[1;30m
Темно-серый
33[1;31m
Светло-красный
33[1;32m
Светло-зеленый
33[1;33m
Желтый
33[1;34m
Светло-синий
33[1;35m
Светло-пурпурный
33[1;36m
Светло-бирюзовый
33[1;37m
Белый
Давайте попробуем окрасить строку приглашения в красный цвет (здесь она выглядит как серая). Добавьте в начало экранированную последовательность:
<[email protected] ~>$ PS1="[33[0;31m]<[email protected]h W>$ "
<[email protected] ~>$
Получилось, но обратите внимание, что весь текст, который вводится с клавиатуры вслед за строкой приглашения, также окрашивается в красный цвет. Для устранения этого эффекта добавьте еще одну экранированную последовательность в конец определения приглашения — этим вы сообщите эмулятору терминала, что тот должен восстановить нормальный цвет:
<[email protected] ~>$ PS1="[33[0;31m]<[email protected]h W>$[33[0m] "
<[email protected] ~>$
Так лучше!
Кроме того, существует возможность изменить цвет фона, для чего предназначены экранированные последовательности, перечисленные в табл. 13.3. Цвет фона не поддерживает атрибут жирного текста.