Spec-Zone.ru › Bash

Файлы автозапуска Bash

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

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

Вызов в качестве интерактивной оболочки входа или с --login

Когда Bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с опцией --login, он сначала читает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла, он ищет ~/.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, он сначала пытается прочитать и выполнить команды из /etc/profile и ~/.profile в указанном порядке. Опцию --noprofile можно использовать для предотвращения этого поведения. При вызове в качестве интерактивной оболочки с именем sh, Bash ищет переменную ENV, расширяет её значение, если оно определено, и использует расширенное значение в качестве имени файла для чтения и выполнения. Поскольку оболочка, вызвана как sh, не пытается прочитать и выполнить команды из других файлов автозапуска, опция --rcfile не имеет эффекта. Неинтерактивная оболочка, вызвана с именем sh, не пытается прочитать другие файлы автозапуска.

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

Вызов в режиме POSIX

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

Вызов удалённым демоном оболочки

Bash пытается определить, когда он запускается со стандартным вводом, подключенным к сетевому соединению, как при выполнении историческим демоном удалённой оболочки, обычно rshd, или демоном защищённой оболочки sshd. Если Bash определяет, что он запускается неинтерактивно таким образом, он читает и выполняет команды из ~/.bashrc, если этот файл существует и доступен для чтения. Он не будет делать этого, если вызывается как sh. Опцию --norc можно использовать для предотвращения этого поведения, а опцию --rcfile — для принудительного чтения другого файла, но ни 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