Spec-Zone.ru › Bash

Файлы запуска Bash

​

В этом разделе описано, как Bash выполняет файлы запуска. Если какой-либо из файлов существует, но не может быть прочитан, Bash сообщает об ошибке. Тильды в именах файлов раскрываются, как описано выше в разделе «Раскрытие тильды» (см. Раскрытие тильды).

Интерактивные оболочки описаны в разделе Интерактивные оболочки.

Запуск в качестве интерактивной оболочки входа в систему или с параметром --login

При запуске Bash в качестве интерактивной оболочки входа в систему или неинтерактивной оболочки с параметром --login сначала считывает и выполняет команды из файла /etc/profile, если этот файл существует. После считывания этого файла Bash ищет файлы ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке и считывает и выполняет команды из первого существующего и доступного для чтения файла. Параметр --noprofile отключает это поведение.

При завершении интерактивной оболочки входа в систему или при выполнении неинтерактивной оболочкой входа в систему встроенной команды exit Bash считывает и выполняет команды из файла ~/.bash_logout, если он существует.

Запуск в качестве интерактивной оболочки без входа в систему

При запуске Bash в качестве интерактивной оболочки, которая не является оболочкой входа в систему, он считывает и выполняет команды из файла ~/.bashrc, если этот файл существует. Параметр --norc отключает это поведение. Параметр --rcfile file указывает Bash использовать file вместо ~/.bashrc.

Поэтому обычно файл ~/.bash_profile содержит строку

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

после (или перед) любой инициализации, относящейся к входу в систему.

Неинтерактивный запуск

При неинтерактивном запуске Bash, например для выполнения сценария оболочки, он ищет в окружении переменную BASH_ENV, раскрывает её значение, если она там присутствует, и использует полученное значение как имя файла для считывания и выполнения. Bash ведёт себя так, как если бы была выполнена следующая команда:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

однако не использует значение переменной PATH для поиска имени файла.

Как отмечалось выше, если неинтерактивная оболочка запускается с параметром --login, Bash пытается считывать и выполнять команды из файлов запуска оболочки входа в систему.

Запуск с именем sh

Если Bash запускается с именем sh, он старается как можно точнее воспроизвести поведение при запуске исторических версий sh, одновременно соблюдая стандарт POSIX.

При запуске в качестве интерактивной оболочки входа в систему или неинтерактивной оболочки с параметром --login Bash сначала пытается считывать и выполнять команды из /etc/profile и ~/.profile в указанном порядке. Параметр --noprofile отключает это поведение.

При запуске в качестве интерактивной оболочки с именем sh Bash ищет переменную ENV, раскрывает её значение, если она определена, и использует полученное значение как имя файла для считывания и выполнения. Поскольку оболочка, запущенная как sh, не пытается считывать и выполнять команды из каких-либо других файлов запуска, параметр --rcfile не действует.

Неинтерактивная оболочка, запущенная с именем sh, не пытается считывать какие-либо другие файлы запуска.

При запуске как sh Bash переходит в режим POSIX после считывания файлов запуска.

Запуск в режиме POSIX

При запуске Bash в режиме POSIX, например с параметром командной строки --posix, он соблюдает стандарт POSIX в отношении файлов запуска. В этом режиме интерактивные оболочки раскрывают переменную ENV и считывают и выполняют команды из файла, имя которого является полученным значением. Другие файлы запуска не считываются.

Запуск удалённым демоном оболочки

Bash пытается определить, подключён ли его стандартный ввод к сетевому соединению, например при запуске историческим и редко встречающимся демоном удалённой оболочки, обычно rshd, или демоном защищённой оболочки sshd. Если Bash определяет, что таким образом он запущен в неинтерактивном режиме, он считывает и выполняет команды из файла ~/.bashrc, если этот файл существует и доступен для чтения. Bash не считывает этот файл при запуске как sh. Параметр --norc отключает это поведение, а параметр --rcfile заставляет Bash использовать другой файл вместо ~/.bashrc, однако обычно ни rshd, ни sshd не запускают оболочку с этими параметрами и не позволяют указать их.

Запуск с различающимися эффективными и реальными идентификаторами UID/GID

Если Bash запущен с эффективным идентификатором пользователя (группы), отличным от реального идентификатора пользователя (группы), и параметр -p не указан, файлы запуска не считываются, функции оболочки не наследуются из окружения, переменные SHELLOPTS, BASHOPTS, CDPATH и GLOBIGNORE, если они присутствуют в окружении, игнорируются, а эффективный идентификатор пользователя устанавливается равным реальному идентификатору пользователя. Если при запуске указан параметр -p, поведение при запуске остаётся таким же, но эффективный идентификатор пользователя не сбрасывается.

Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API