PS1
Строка приглашения к вводу № 1. Определяет содержимое строки приглашения к вводу в командной оболочке. Как будет показано позднее, эту строку можно менять весьма существенно
PWD
Текущий рабочий каталог
TERM
Тип терминала. Unix-подобные системы поддерживают множество протоколов для работы с терминалами; эта переменная определяет протокол, который будет использоваться при обмене данными с эмулятором терминала
TZ
Определяет часовой пояс. В большинстве Unix-подобных систем внутренние часы компьютера устанавливаются в координированное универсальное время (Coordinated Universal Time, UTC), а при выводе значения времени к нему добавляется смещение, определяемое этой переменной
USER
Имя пользователя
Не волнуйтесь, если какие-то переменные у вас отсутствуют. Они могут отличаться в разных дистрибутивах.
Как устанавливается окружение?
Когда мы входим в систему, запускается программа bash и читает содержимое серии конфигурационных сценариев, называемых файлами запуска (startup files), где определяется окружение по умолчанию, общее для всех пользователей. Затем она читает дополнительные файлы запуска в вашем домашнем каталоге, где определяется личное окружение. Точная последовательность обработки файлов зависит от типа запускаемого сеанса командной оболочки.
Оболочка входа и простая оболочка
Сеансы работы с командной оболочкой входа могут быть двух типов: сеанс командной оболочки входа (login shell session) и сеанс простой командной оболочки (non-login shell session).
Сеанс командной оболочки входа (login shell session) — это сеанс, который на входе запрашивает имя пользователя и пароль, например, когда вход выполняется в виртуальной консоли. Сеанс простой командной оболочки (non-login shell session) обычно начинается, когда запускается терминал в графическом окружении.
Командные оболочки входа читают один или несколько файлов запуска, перечисленных в табл. 11.2.
Обычные сеансы командной оболочки читают файлы, перечисленные в табл. 11.3.
Помимо чтения настроек из файлов запуска, перечисленных выше, обычные командные оболочки наследуют окружение от родительского процесса, каковым обычно является командная оболочка входа.
Таблица 11.2. Файлы запуска для сеансов командной оболочки входа
Файл
Содержит
/etc/profile
Общесистемный конфигурационный сценарий, настройки из которого применяются для всех пользователей
~/.bash_profile
Личный пользовательский файл запуска. Может использоваться для расширения и/или переопределения общесистемных настроек
~/.bash_login
Если файл ~/.bash_profile присутствует в домашнем каталоге, bash пытается прочитать его
~/.profile
Если в домашнем каталоге нет ни ~/.bash_profile, ни ~/.bash_login, bash пытается прочитать этот файл. Используется по умолчанию в дистрибутивах на основе Debian, таких как Ubuntu
Таблица 11.3. Файлы запуска для обычных сеансов командной оболочки
Файл
Содержит
/etc/bash.bashrc
Общесистемный конфигурационный сценарий, настройки из которого применяются для всех пользователей
~/.bashrc
Личный пользовательский файл запуска. Может использоваться для расширения и/или переопределения общесистемных настроек
Загляните в свою систему и посмотрите, какие файлы запуска у вас имеются. Помните: поскольку большинство имен файлов из перечисленных выше начинается с точки (такие файлы считаются скрытыми), при использовании команды ls ей необходимо передавать параметр -a.
С точки зрения обычного пользователя, файл ~/.bashrc является, пожалуй, самым важным файлом запуска, потому что его содержимое читается практически всегда. Обычные командные оболочки читают его по умолчанию, а большинство файлов запуска для командных оболочек входа написаны так, что оболочка также прочитает файл ~/.bashrc.
Что находится в файлах запуска?
Если заглянуть внутрь типичного файла .bash_profile (взятого из системы CentOS-4), можно увидеть следующее:
# .bash_profile
# Загрузить псевдонимы и функции
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# Определение пользовательского окружения и запуск программ
PATH=$PATH:$HOME/bin
export PATH
Строки, начинающиеся с #, — это комментарии, они не читаются командной оболочкой, а предназначены для человека. Первый интересный фрагмент начинается в четвертой строке:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Этот код называется составной условной командой, полное описание которой будет дано в части IV книги, где обсуждается программирование на языке командной оболочки, а пока приведем ее перевод на человеческий язык:
Если файл "~/.bashrc" существует, тогда
прочитать файл "~/.bashrc" file.
Как видите, этот фрагмент вынуждает командную оболочку входа прочитать содержимое файла .bashrc. Следующая операция, выполняемая в файле запуска, имеет отношение к переменной PATH.
Приходилось ли вам задумываться над тем, как командная оболочка находит команды, которые вводятся в командной строке? Например, когда мы вводим ls, командная оболочка не обыскивает весь компьютер целиком, чтобы найти /bin/ls (полный путь к команде ls), а просматривает только каталоги, перечисленные в переменной PATH.
Переменная PATH часто (но не всегда, в зависимости от дистрибутива) устанавливается в файле запуска /etc/profile, как показано ниже:
PATH=$PATH:$HOME/bin
Здесь в конец списка в переменной PATH добавляется каталог $HOME/bin. Этот код может служить примером использования механизма подстановки параметров, с которым мы познакомились в главе 7. Для демонстрации попробуйте выполнить следующий пример:
[[email protected] ~]$ foo="This is some"
[[email protected] ~]$ echo $foo
This is some
[[email protected] ~]$ foo=$foo" text."
[[email protected] ~]$ echo $foo
This is some text.
Используя этот прием, можно добавлять текст в конец содержимого переменной.
При добавлении строки $HOME/bin в конец содержимого переменной PATH происходит добавление каталога $HOME/bin в список каталогов, где будет выполняться поиск вводимых команд. Это означает, что если мы решим создать каталог в своем домашнем каталоге для хранения личных программ, командная оболочка уже будет готова к этому. Нам останется только дать имя bin этому каталогу.
ПРИМЕЧАНИЕ
Многие дистрибутивы предоставляют настройки PATH по умолчанию. Некоторые дистрибутивы на основе Debian, такие как Ubuntu, проверяют наличие каталога ~/bin во время входа, и если он имеется, динамически добавляют его в переменную PATH.
Наконец, у нас осталась еще одна строка:
export PATH
Команда export указывает командной оболочке сделать содержимое переменной PATH доступным дочерним процессам этой оболочки.
Изменение окружения
Теперь, зная, где находятся файлы запуска и что они содержат, мы можем изменить их, чтобы настроить окружение.
Какие файлы следует изменять?
Как правило, изменение содержимого переменой PATH или определение дополнительных переменных окружения следует производить в файле .bash_profile (или эквивалентном ему, в зависимости от дистрибутива, — например, в Ubuntu используется файл .profile). Во всех остальных случаях изменения должны производиться в .bashrc. Если вы не системный администратор и вам не требуется вносить изменения, касающиеся всех пользователей системы, изменяйте только файлы в своем домашнем каталоге. Конечно, можно изменять файлы в /etc, такие как profile, и во многих случаях в этом есть определенный смысл, но давайте пока избегать рискованных действий.