На самом деле, это bash
именно то, что читает .bashrc
(и /etc/bash.bashrc
). Есть много разных оболочек.
Страница Баша людей (Брайан Фокс и Чет Рэй, также информационная страница «Bash Startup Files» ) является авторитетным справочной:
Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды
~/.bashrc
, если этот файл существует. Это может быть запрещено с помощью--norc
опции. Опция--rcfile
file заставит bash читать и выполнять команды из файла вместо~/.bashrc
.Когда bash запускается неинтерактивно, например, для запуска сценария оболочки он ищет переменную
BASH_ENV
в среде, расширяет ее значение, если оно там появляется, и использует расширенное значение в качестве имени файла для чтения и выполнения. Bash ведет себя так, как будто была выполнена следующая команда:if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
но значение
PATH
переменной не используется для поиска имени файла.
Файл просто командная оболочка. Обычно он используется для изменения приглашений, установки переменных среды и определения процедур оболочки. Традиционно, файл .profile
используется для этой цели, но bash
имеет так много расширений, что ему нужен собственный файл запуска для пользователей, которые хотят помещать ошибки в файлы запуска.
« Не оболочка входа в систему » означает такие вещи, как запуск скриптов и, как правило, запуск терминальных окон менеджерами окон. Иногда я настраиваю системы * nix, чтобы иметь .bashrc
и BASH_ENV
просто исходный код .profile
. Пока вы не выходите за пределы команд оболочки POSIX, вы получите такую же инициализацию в любой оболочке.
Это особенно ценно, когда sh
это действительно так bash
, что иногда случается. Для этого используйте:
. .profile
Одна из причин, по которой все это так сложно, состоит в том, что иногда люди помещают вещи, которые производят вывод, в файлы запуска оболочки, или они безоговорочно задают приглашения. Это вызывает много проблем при запуске программ оболочки и команд backtick внутри языков, не говоря уже о system(3)
программах на Си. bash
Я думаю, что способ запуска спроектирован так, чтобы иметь один файл, в котором настройки вывода и приглашения в порядке, и один файл, в котором это не так. Традиционно, чтобы различить интерактивность, был бы проведен тест во время выполнения, например, проверка, установлена ли подсказка.