В чем разница между .bashrc, .bash_profile и .environment?
-
03-07-2019 - |
Вопрос
Я использовал несколько разных * nix-систем за эти годы, и кажется, что каждый вариант Bash, который я использую, имеет свой алгоритм для определения, какие сценарии запуска следует запускать. Для таких задач, как настройка переменных среды и псевдонимов и печать сообщений запуска (например, MOTD), какой сценарий запуска является подходящим местом для этого?
В чем разница между помещением вещей в .bashrc
, .bash_profile
и .environment
? Я также видел другие файлы, такие как .login
, .bash_login
и .profile
; они когда-либо актуальны? В чем различия, которые запускаются при физическом входе в систему, удаленном входе через ssh и открытии нового окна терминала? Есть ли существенные различия между платформами (включая Mac OS X (и его Terminal.app) и Cygwin Bash)?
Решение
Основное отличие от конфигурационных файлов оболочки заключается в том, что некоторые из них читаются только по имени входа в систему оболочки (например, когда вы входите в систему с другого хоста или входите в текстовую консоль локального компьютера с Unix). они называются, скажем, .login
или .profile
или .zlogin
(в зависимости от того, какую оболочку вы используете). р>
Затем у вас есть файлы конфигурации, которые читаются " интерактивными " оболочки (как, например, те, которые подключены к терминалу (или псевдотерминалу в случае, скажем, эмулятора терминала, работающего под управлением оконной системы). Это те, с именами, такими как .bashrc
, < code> .tcshrc , .zshrc
и т. д.
bash
усложняет это тем, что .bashrc
доступен только для чтения оболочкой, которая одновременно является интерактивной и не входящей в систему. , поэтому вы обнаружите, что большинство людей в конце концов говорят своим .bash_profile
читать .bashrc
с чем-то вроде
[[-r ~ / .bashrc]] & amp; & amp; , ~ / .Bashrc код>
Другие оболочки ведут себя по-разному - например, с помощью zsh
, .zshrc
всегда читается для интерактивной оболочки, независимо от того, логин она или нет.
Страница руководства для bash объясняет обстоятельства, при которых каждый файл читается. Да, в целом поведение между машинами одинаковое.
.profile
- это просто имя файла сценария входа, которое изначально использовалось / bin / sh
. bash
, как правило, обратно совместимый с / bin / sh
, будет читать .profile
, если он существует.
Другие советы
Это просто. Это объясняется в man bash
:
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file
Оболочки входа в систему - это те, которые читаются при входе в систему (например, они не выполняются при простом запуске xterm, например). Есть и другие способы авторизации. Например, используя менеджер отображения X. У них есть другие способы чтения и экспорта переменных среды во время входа в систему.
Также прочитайте главу INVOCATION
в руководстве. В нем говорится " В следующих параграфах описывается, как bash выполняет свои файлы запуска. & Quot; , я думаю, что это точечный шаг :) В нем объясняется, что такое " интерактивный " оболочка тоже.
Bash не знает о .environment
. Я подозреваю, что это файл вашего дистрибутива, для установки переменных среды независимо от используемой вами оболочки. Р>
Классически, ~ / .profile
используется Bourne Shell и, вероятно, поддерживается Bash как устаревшая мера. Опять же, ~ / .login
и ~ / .cshrc
использовались C Shell - я не уверен, что Bash использует их вообще.
~ / .bash_profile
будет использоваться один раз при входе в систему. Сценарий ~ / .bashrc
читается при каждом запуске оболочки. Это аналогично /. Cshrc
для оболочки C.
Одним из следствий этого является то, что содержимое в ~ / .bashrc
должно быть как можно более легким (минимальным), чтобы уменьшить накладные расходы при запуске оболочки без входа в систему.
Я считаю, что файл ~ / .environment
является файлом совместимости для Korn Shell.
Я нашел информацию о .bashrc и .bash_profile здесь Подводя итог:
.bash_profile выполняется, когда вы авторизоваться. Вещи, которые вы положили туда, могут быть ваш путь и другие важные переменные окружения.
.bashrc используется для не входящих в систему оболочек. Я не уверен, что это значит. я знаю что RedHat выполняет его каждый раз, когда вы начинаете другая оболочка (su для этого пользователя или просто снова звоню bash) хочу поставить псевдонимы там, но снова Я не уверен, что это значит. я просто игнорируй это сам.
.profile является эквивалентом .bash_profile для рута. Я думаю имя изменено, чтобы позволить другим Оболочки (csh, sh, tcsh) также используют его. (он вам не нужен)
Существует также .bash_logout, который выполняется в, да, хорошее предположение ... выход. Вы можете остановить демонов или даже сделать немного уборки. Вы можете также добавьте " очистить " там, если вы хотите очистите экран при выходе из системы.
Кроме того, имеется полный контроль над каждым из файлов конфигурации. здесь
Они, вероятно, даже зависят от дистрибутива, не все дистрибутивы предпочитают иметь каждый конфигуратор с собой, а некоторые имеют даже больше. Но когда они имеют одинаковое имя, они обычно содержат одинаковое содержание.
Согласно Джошу Стейгеру , Mac OS X Terminal.app на самом деле по умолчанию запускает оболочку входа в систему, а не не входящую в систему, для каждого нового окна терминала, вызывая .bash_profile вместо .bashrc.
Он рекомендует:
Большую часть времени вы не хотите поддерживать два отдельных файла конфигурации для входных и не входящих в систему оболочек & # 8212; когда вы устанавливаете PATH, вы хотите, чтобы он применимо к обоим. Вы можете это исправить, поставив .bashrc из вашего Файл .bash_profile, затем помещает PATH и общие настройки в .bashrc.
Для этого добавьте следующие строки в .bash_profile:
if [ -f ~/.bashrc ]; then source ~/.bashrc fi
Теперь, когда вы входите в свой машина из консоли .bashrc будет вызываться.
Хорошее место для просмотра - справочная страница bash. Здесь - онлайн-версия. Ищите «ПРИЗНАНИЕ» раздел. Р>
Я использовал дистрибутивы семейства Debian, которые, по-видимому, исполняют .profile
, но не .bash_profile
,
тогда как производные RHEL выполняют .bash_profile
перед .profile
.
Кажется, что это беспорядок, когда приходится настраивать переменные среды для работы в любой ОС Linux.