.bashrc
и НЕ.bash_profile
являются сценариями. Это конфигурационный файл, каждый раз получаемый одним из двух способов:bash
- интерактивный
- авторизоваться
Раздел INVOCATION на странице руководства bash - это то, что нужно.
Войти оболочкой является один, первым символом аргумента нуля является -
, или запущенным с --login
опцией.
Интерактивная оболочка один запускаются без аргументов без опций и без -c
опции которого стандартного ввода и ошибок оба подключены к клеммам (как определенно isatty(3))
, или один начал с -i
опцией. PS1 устанавливается и $-
включает в себя , i
если в bash
интерактивном режиме , что позволяет сценарий оболочки или файл запуска, чтобы проверить это состояние.
Следующие параграфы описывают, как bash
выполняются его файлы запуска. Если какой-либо из файлов существует, но не может быть прочитан, bash сообщает об ошибке. Тильды раскрываются в именах файлов, как описано ниже в разделе «
Расширение тильды» в разделе « РАСШИРЕНИЕ ».
Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с --login
параметром, она сначала читает и выполняет команды из файла /etc/profile
, если этот файл существует. После прочтения этого файла, он ищет ~/.bash_profile
,
~/.bash_login
и ~/.profile
, в таком порядке, и читает и выполняет команду из первого, который существует и читаемые. Эта
--noprofile
опция может использоваться, когда оболочка запускается, чтобы запретить это поведение.
При выходе из оболочки входа в систему bash читает и выполняет команды из файла ~/.bash_logout
, если он существует.
Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды ~/.bashrc
, если этот файл существует. Это может быть запрещено с помощью --norc
опции. --rcfile file
Опция заставит Баш читать и выполнять команды из файла вместо ~/.bashrc
.
Вы можете контролировать, когда они загружаются через ключи командной строки, --norc
и --noprofile
. Вы также можете переопределить расположение, куда они загружаются с помощью --rcfile
коммутатора.
Как уже упоминалось, вы можете имитировать, как эти файлы загружаются с помощью source <file>
команды или . <file>
команды.
Лучше думать об этой функциональности следующим образом:
- Bash запускается с голой средой
- Затем bash открывает один из этих файлов (в зависимости от того, как он был вызван как интерактивный или для входа в систему, а затем ...
- ... строка за строкой выполняет каждую из команд в файле ...
- по завершении дает управление в виде приглашения, ожидая ввода
Методы вызова
Эта тема, кажется, появляется время от времени, поэтому вот небольшая таблица различных способов вызова bash
и их результатов. ПРИМЕЧАНИЕ. Чтобы помочь, я добавил сообщения «sourced $ HOME / .bashrc» и «sourced». $ HOME / .bash_profile "в соответствующие файлы.
основные звонки
Баш-я
$ bash -i
sourced /home/saml/.bashrc
Баш-л
$ bash -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
Баш-ил-или- Баш-ли
$ bash -il
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash -c "..cmd .."
$ bash -c 'echo hi'
hi
ПРИМЕЧАНИЕ. Обратите внимание, что -c
ни один из этих файлов не был источником!
отключение файлов конфигурации от чтения
Баш - Норк
$ bash --norc
bash-4.1$
bash --noprofile
$ bash --noprofile
sourced /home/saml/.bashrc
Баш - Норк -i
$ bash --norc -i
bash-4.1$
Баш - Норк-л
$ bash --norc -l
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash --noprofile -i
$ bash --noprofile -i
sourced /home/saml/.bashrc
bash --noprofile -l
$ bash --noprofile -l
bash-4.1$
bash --norc -i -или- bash --norc -l
$ bash --norc -c 'echo hi'
hi
Более эзотерические способы называть Баш
bash --rcfile $ HOME / .bashrc
$ bash -rcfile ~/.bashrc
sourced /home/saml/.bashrc
bash --norc --rcfile $ HOME / .bashrc
$ bash --norc -rcfile ~/.bashrc
bash-4.1$
Эти не удалось
bash -i -rcfile ~ / .bashrc
$ bash -i -rcfile ~/.bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: /home/saml/.bashrc: restricted: cannot specify `/' in command names
bash -i -rcfile .bashrc
$ bash -i -rcfile .bashrc
sourced /home/saml/.bashrc
sourced /home/saml/.bash_profile
bash: .bashrc: command not found
Есть, вероятно, больше, но вы понимаете, надеюсь ...
Что-то еще?
И наконец, если вы настолько увлечены этой темой, что хотели бы прочитать / изучить ее подробнее, я настоятельно рекомендую взглянуть на Руководство по Bash для начинающих, в частности раздел 1.2. Преимущества Bourne Again Sheell . Различные подразделы этого раздела , «1.2.2.1. Вызов» через «1.2.2.3.3. Интерактивное поведение оболочки», объясняют различия на низком уровне между различными способами, которые вы можете вызывать bash
.