Bash - командный интерпретатор GNU Bourne

       

ВЫЗОВ


Начальный командный интерпретатор (login shell) - это интерпретатор, первый символ нулевого аргумента которого является дефисом (-) или который запущен с опцией .

Интерактивным является командный интерпретатор, стандартный входной и выходной потоки которого подключены к терминалам (что определяется с помощью функции isatty(3)), или запущенный с опцией . Переменная среды PS1 устанавливается и флаги ($-) включают i, только если bash является интерактивным интерпретатором, что позволяет проверить это в файле начального запуска или в сценарии командного интерпретатора.

Следующие абзацы описывают, как bash выполняет свои файлы начального запуска. Если любой из этих файлов существует, но не может быть прочитан, bash выдает сообщение об ошибке. Символы тильды (~) в именах файлов заменяются так, как описано в подразделе "" раздела "".

При вызове bash как интерактивного начального командного интерпретатора, или как неинтерактивного интерпретатора с опцией , он сначала читает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла, он последовательно ищет файлы ~/.bash_profile, ~/.bash_login и ~/.profile, читает и выполняет команды из первого же из них, который существует и доступен на чтение. Опция может использоваться при запуске командного интерпретатора, чтобы отменить это действие.

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

При запуске интерактивного командного интерпретатора, не являющегося начальным, bash читает и выполняет команды из файла ~/.bashrc, если он существует. Это действие можно отменить с помощью опции . Опция заставляет bash

читать и выполнять команды из указанного файла вместо ~/.bashrc.

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


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

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

Если bash вызван с именем sh, он пытается, наколько это возможно, имитировать поведение при запуске старых версий интерпретатора sh, соответствуя при этом стандарту POSIX. При вызове в качестве интерактивного начального командного интерпретатора или неинтерактивного, но с опцией , он сначала пытается читать и выполнять команды последовательно из файлов /etc/profile и ~/.profile. Для отмены этого действия можно использовать опцию . При вызове в качестве интерактивного командного интерпретатора с именем sh, bash ищет переменную среды ENV, получает ее значение, если оно задано, и использует это значение в качестве имени файла, который необходимо прочитать и выполнить. Поскольку интерпретатор, вызванный как sh, не пытается читать и выполнять команды в других файлах начального запуска, опция не действует. Неинтерактивный командый интерпретатор, вызванный с именем sh, не пытается читать и выполнять никакие файлы начального запуска. При вызове по имени sh, командный интерпретатор bash входит в режим posix после прочтения файлов начального запуска.

При запуске bash в режиме posix, например, с помощью опции командной строки , он следует стандарту POSIX при работе с файлами начального запуска. В этом режиме интерактивные командные интерпретаторы берут значение переменной среды ENV, читают и выполняют команды из соответствующего файла. Никакие другие файлы начального запуска не читаются.

Командный интерпретатор bash пытается определить, не запущен ли он демоном удаленного командного интерпретатора, обычно, rshd. Если оказывается, что bash запущен демоном rshd, он читает и выполняет команды из файла ~/.bashrc, если этот файл существует и доступен на чтение. Командный интерпретатор bash так не делает, если запущен как sh. Для отмены этого действия можно использовать опцию , а с помощью опции можно заставить читать другой файл, но обычно демон rshd не задает эти опции командному интерпретатору и не позволяет их указать.

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


Содержание раздела