Linux для пользователя
Шрифт:
(правда, в этом случае вы должны знать имя интересующей вас переменной).
Среди переменных, которые вы увидите в выводе команды set, встречаются очень интересные переменные. Обратите, например, внимание на переменную RANDOM. Если вы несколько раз подряд выполните команду
вы каждый раз будете получать новое значение. Дело в том, что эта переменная возвращает случайное целое из интервала 0 - 32768.
5.6.2 Приглашения оболочки
Одна из очень важных переменных имеет имя PS1. Эта переменная задает вид приглашения, которое bash выводит, когда ожидает ввода очередной команды пользователем. По умолчанию этой переменной присвоено значение "\s-\v\$ ". Вообще-то в bash существует
Приглашение, задаваемое переменной PS3, используется в команде select. Приглашение, задаваемое переменной PS4, выводится перед каждой командой, в то время, когда bash отслеживает процесс выполнения. Значение по умолчанию - "+".
Если у вас есть такое желание, вы можете изменить вид переменных PS1 и PS2. При этом можно использовать как любые символы, вводимые с клавиатуры, так и некоторое число специальных символов, которые при формировании строки приглашения декодируются в соответствии с табл. 5.3 (приводим только некоторые из них, для примера; полный список см. в man-странице по утилите bash).
Таблица 5.3. Специальные символы для формирования приглашения
Символ | Его значение |
---|---|
\a | Звуковой сигнал (ASCII-код 07) |
\d | Дата в формате "День, месяц, число", например, Срд, Окт, 17. |
\h | Имя хоста (hostname) до первой точки |
\H | Полное имя хоста |
\t | Текущее время в 24-часовом формате: HH:MM:SS (часы:минуты:секунды) |
\T | Текущее время в 12-часовом формате: HH:MM:SS |
\@ | Текущее время в 12-часовом формате am/pm |
\u | Имя пользователя, запустившего оболочку |
\w | Полное имя текущего рабочего каталога (начиная с корня) |
\W | Текущий рабочий каталог (без указания пути) |
\$ | Символ #, если оболочка запущена суперпользователем, и символ $, если оболочка запущена обычным пользователем |
\nnn | Символ, имеющий восьмеричный код nnn |
\n | Новая строка (перевод строки) |
\s | Имя оболочки |
\# | Текущий номер команды |
\\ | Обратный слэш (a backslash) |
\[ | Начало последовательности не печатаемых символов (этот символ может быть использован для того, чтобы включить в текст подсказки последовательность управляющих символов терминала) |
\] | Конец последовательности не печатаемых символов |
\! | Порядковый номер данной команды в истории команд |
Текущий номер команды (порядковый номер выполняемой команды в рамках текущей сессии) может отличаться от номера данной команды в
списке истории команд, поскольку последний включает в себя команды, которые были сохранены в файле истории команд.После того, как значение переменной, определяющей подсказку, прочитано оболочкой, в нем могут быть произведены подстановки в соответствии с правилами расширения параметров, подстановок в именах команд и арифметических выражениях, а также разбиения слов (word splitting). Об этих правилах будет рассказано чуть ниже, в разд. 5.7.
Например, после выполнения команды (поскольку в строке имеется пробел, кавычки обязательны)
в стандартном приглашении будет выводиться квадратная скобка, имя пользователя, символ @, имя компьютера, пробел, название текущего каталога (без указания пути), закрывающая квадратная скобка и символ $ (если в оболочке работает простой пользователь) или # (если оболочка запущена от имени пользователя root).
5.6.3 Переменная PATH
Еще одна очень важная переменная имеет имя PATH. Она задает перечень путей к каталогам, в которых bash осуществляет поиск файлов (в частности, файлов с командами) в тех случаях, когда полный путь к файлу не задан в командной строке. Отдельные каталоги в этом перечне разделяются двоеточиями. По умолчанию переменная PATH включает каталоги /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin, т. е. имеет вид:
Для того, чтобы добавить каталог в этот список, нужно выполнить следующую команду:
При осуществлении поиска оболочка просматривает каталоги именно в том порядке, как они перечислены в переменной PATH.
Отметим, что можно включить в этот список и текущий каталог, добавив в переменную PATH точку. Однако этого не рекомендуется делать по соображениям безопасности: злоумышленник может положить в общедоступный каталог команду, имя которой совпадает с одной из часто выполняемых суперпользователем команд, но выполняющую совершенно другие действия (особенно если текущий каталог стоит в начале перечня путей поиска).
5.6.4 Переменная IFS
Эта переменная задает разделители полей (Internal Field Separator), которые используются при операции разделения слов при преобразованиях командной строки, выполняемых оболочкой перед тем, как запустить командную строку на исполнение. Значение этой переменной по умолчанию - "‹Пробел›‹Tab›‹Символ_новой_строки›".
5.6.5 Текущий и домашний каталоги
Имя текущего каталога сохраняется в переменной окружения (с именем PWD), и значение этой переменной изменяется при каждом запуске программы cd (а также при смене текущего каталога любым другим способом, например, через Midnight Commander).
Аналогичным образом полное имя (с указанием пути) домашнего каталога пользователя, запустившего данный процесс, сохраняется в переменной HOME.
5.6.6 Команда export
Когда оболочка запускает на выполнение какую-то программу или команду, она передает им часть переменных окружения. Для того, чтобы переменная окружения передавалась запускаемому из оболочки процессу, ее нужно задавать с помощью специальной команды export, т. е. вместо
надо записать
В таком случае все запускаемые из оболочки программы (в том числе вторичные экземпляры самой оболочки) будут иметь доступ к заданным таким образом переменным, т. е. могут вызывать их значения по именам.
5.7. Раскрытие выражений (expansion)
Когда оболочка получает какую-то командную строку на выполнение, она до начала выполнения команды осуществляет "грамматический разбор" полученной командной строки. Одним из этапов такого "разбора" является раскрытие или подстановка выражений (expansion). В bash имеется семь типов подстановки выражений:
• раскрытие скобок (brace expansion);
• замена знака тильды (tilde expansion);
• подстановка параметров и переменных;