Как выполнить команды при старте консольной сессии

При старте консольной сессии (например, при логине в систему или при запуске эмулятора терминала), командная оболочка выполняет скрипты стартовой инициализации. При окончании сессии выполняются скрипты завершения сессии. Вот, что сообщает об этом справочное руководство командной оболочки bash.

При запуске bash в качестве интерактивной или не интерактивной (с ключом --login) командой оболочки, то есть при логине пользователя в систему, bash выполняет в следующем порядке следующие файлы скриптов, если таковые существуют:

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.proflie

Чтобы при старте bash не выполнял эти скрипты, можно использовать при запуске ключ --noprofile.

По завершении сессии выполняется скрипт ~/.bash_logout.

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

  1. /etc/bash.bashrc
  2. ~/.bashrc

Чтобы bash не выполнял rc-скрипты, можно при запуске bash использовать ключ --norc.

Чтобы при запуске bash выполнил вместо скрипта ~/.bashrc файл скрипта пользователя, можно использовать ключ --rcfile название_файла.

Когда bash запускается не интерактивно, например, чтобы выполнить скрипт, bash использует значение переменной среды BASH_ENV, исполняя его в качестве команды:

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

При этом значение переменной окружения PATH не используется, поэтому в качестве значения переменной BASH_ENV следует указывать абсолютный путь к файлу.

Если bash вызывается с использованием названия файла sh, то bash имитирует стартовой поведение sh, насколько возможно, в соответствии со стандартами POSIX.

При запуске в качестве командной оболочки при логине, выполняются файлы /etc/profile и ~/.profile.

При запуске в качестве интерактивной оболочки с названием sh, выполняется команда, заданная значение переменной среды ENV. Файлы rc-файлы не выполняются, поэтому ключ --rcfile игнорируется.

При запуске в качестве не интерактивной оболочки с названием sh, никакие стартовые скрипты не выполняются.

После выполнения стартовых скриптов, если bash запущен по названию sh, bash переключается в режим posix.

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

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

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