Аргументы и вызов Bash

Аргументы Bash

 

Если аргументы остаются после параметров и ни «-c», ни «-s» параметров перед ними не было поставлено, первым аргументом считается имя файла, который содержит shell команды. В том случае когда Bash вызывается таким образом, «$ 0» устанавливается на имя файла, а позиционные параметры устанавливаются в остальные аргументы. Оболочка Bash читает и выполняет команды из этого файла, и затем выходит. Статусом выхода Bash является статус выхода последней выполненной команды в сценарии. В том случае если не выполняется ни одна команда, то статус выхода равен 0. Сценарий сначала старается открыть файл в текущем каталоге, и только в том случае если файл не будет найден shell начнет искать в каталогах, в пути к Вашему сценарию.

 

Вызов Bash

Логин в shell является первым символом аргумента равным нулю «» или запускается с параметром —login.

Интерактивная оболочка запускается без аргументов и без параметров -c чьи стандартные ошибки связаны с терминалом так как определено isatty, или запущенным параметром «-i». Устанавливается переменная PS1 и включает в себя «$» если Bash является интерактивным, позволяя скрипту либо файлу запуска проверку этого состояния.

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

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

Когда пользователь выходит из оболочки используещей регистрацию (shell login), Bash читает и выполняет команды из файла ~/.bash_logout, если такой существует.

При запуске интерактивной оболочки, если она не является оболочкой (shell login), Bash читает и выполняет команды из файла /etc/bash.bashrc и ~/.bashrc, если такой файл существует. Она может быть подавлена при помощи параметра «—norc». Параметр —rcfile заставит Bash читать и выполнять команды из файла, а не из /etc/bash.bashrc и ~/.bashrc.

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

if [ -n «$BASH_ENV» ]; then . «$BASH_ENV»; fi

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

Если же Bash вызывается с именем sh, он постарается имитировать запуск более старых версий sh, настолько насколько это возможно, которые так же соответствуют стандартам POSIX. При вызове интерактивной оболочка (login shell), или же не интерактивной оболочки с параметром «—login», он сначала постарается читать и выполнять команды из /etc/profile и ~/.profile в таком именно порядке. Параметр «—noprofile» может быть использован для подавления этого поведения. При вызове в качестве интерактивной оболочки с именем sh, bash станет искать переменную ENV которая расширяет её значение, если же она определена, то оболочка использует расширенное значение в качестве имени файла для чтения и выполнения. Командная оболочка вызванная как sh не пытается читать и выполнять команды от любых других файлов запуска, так параметр «—rcfile» не будет иметь никакого эффекта. Неинтерактивная оболочка вызывающаяся с именем sh не пытается читать никакие другие файлы запуска. При вызове оболочки в качестве sh, Bash переходит в posix режим после запуска чтения файлов.

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

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *