Между чем различие .bashrc
и .bash_profile
и какой я должен использовать?
Традиционно, когда Вы входите в систему Unix, система запустила бы одну программу для Вас. Та программа является оболочкой, т.е. программой, разработанной для запуска других программ. Это - оболочка командной строки: Вы запускаете другую программу путем введения ее имени. Оболочка по умолчанию, Оболочка Bourne, читает команды из ~/.profile
когда это вызывается как оболочка входа в систему.
Bash является подобной Границе оболочкой. Это читает команды из ~/.bash_profile
когда это вызывается как оболочка входа в систему, и если тот файл не существует ¹, это пытается читать ~/.profile
вместо этого.
Можно вызвать оболочку непосредственно в любое время, например, путем запуска эмулятора терминала в среде GUI. Если оболочка не является оболочкой входа в систему, она не читает ~/.profile
. При запуске удара как интерактивной оболочки (т.е. не запускать скрипт), он читает ~/.bashrc
(кроме тех случаев, когда вызванный как оболочка входа в систему, затем это только читает ~/.bash_profile
или ~/.profile
.
Поэтому:
~/.profile
место состоит в том, чтобы поместить материал, который относится к Вашей целой сессии, такой как программы, которые Вы хотите запустить, когда Вы входите в систему (но не графические программы, они входят в другой файл), и определения переменной среды.
~/.bashrc
место состоит в том, чтобы поместить материал, который применяется только для избиения себя, такие как псевдоним и функциональные определения, опции оболочки и быстрые настройки. (Вы могли также поместить привязки клавиш там, но для удара они обычно входят ~/.inputrc
.)
~/.bash_profile
может использоваться вместо ~/.profile
, но это читается ударом только, не любой другой оболочкой. (Это - главным образом беспокойство, если Вы хотите, чтобы Ваши файлы инициализации работали над несколькими машинами, и Ваша оболочка входа в систему не является ударом на всех них.) Это - логическое место для включения ~/.bashrc
если оболочка является интерактивной. Я рекомендую следующее содержание в ~/.bash_profile
:
if [ -r ~/.profile ]; then . ~/.profile; fi
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac
На современных нельдах существует добавленная сложность, связанная с ~/.profile
. Если Вы входите в систему в графической среде (то есть, если программа, где Вы вводите свой пароль, работает в графическом режиме), Вы автоматически не получаете оболочку входа в систему, которая читает ~/.profile
. В зависимости от графической программы входа в систему на менеджере окон или настольной среде Вы работаете впоследствии, и о том, как Ваше распределение настроило эти программы, Ваш ~/.profile
май или не может быть считан. Если это не, обычно существует другое место, где можно определить переменные среды и программы для запуска, когда Вы входите в систему, но нет, к сожалению, никакого стандартного местоположения.
Обратите внимание, что можно видеть тут и там рекомендации любой вставленной переменной среды определения ~/.bashrc
или всегда запуск входит в оболочки в терминалах. Оба - плохие идеи. Наиболее распространенная проблема или с этих идей состоит в том, что Ваши переменные среды будут только установлены в программах, запущенных через терминал, не в программах, запущенных непосредственно со значком или меню или сочетанием клавиш.
¹ Для полноты, запросом: если .bash_profile
не существует, удар также пробует .bash_login
перед отступанием к .profile
. Не стесняйтесь забывать, что это существует.
Из этой короткой статьи
Согласно странице справочника удара, .bash_profile выполняется для оболочек входа в систему, в то время как .bashrc выполняется для интерактивных оболочек невхода в систему.
Что такое оболочка входа в систему или невхода в систему?
Когда Вы входите в систему (например: введите имя пользователя и пароль) через консоль, или физически находящуюся в машине при начальной загрузке, или удаленно через ssh: .bash_profile выполняется для конфигурирования вещей перед начальной командной строкой.
Но, если Вы уже вошли в свою машину и открываете новое окно терминала (xterm) в Gnome, или KDE, затем .bashrc выполняется перед командной строкой окна. .bashrc также выполняется при запуске нового экземпляра удара путем ввода/bin/bash в терминале.
Назад в былые времена, когда псевдо tty's не были псевдо и на самом деле, ну, в общем, введенный, и UNIXes, были получены доступ модемами, настолько медленными, Вы видели, что каждая буква была распечатана на Ваш экран, эффективность была главной. Для помощи эффективности несколько, у Вас было понятие основного окна входа в систему и безотносительно других окон, Вы раньше на самом деле работали. В Вашем главном окне Вы хотели бы уведомления любой новой почте, возможно запустили бы некоторые другие программы в фоновом режиме.
Для поддержки этого оболочки получили файл .profile
конкретно на 'оболочках входа в систему'. Это сделало бы специальное предложение, однажды установка сессии. Bash расширил это несколько для рассмотрения .bash_profile сначала прежде .profile, этот способ, которым Вы могли поместить удар только вещи там (таким образом, они не завинчивают Оболочку Bourne, и т.д., который также посмотрел на .profile). Другие оболочки, невход в систему, просто получили бы емкостно-резистивный файл, .bashrc (или .kshrc, и т.д.).
Это - что-то вроде анахронизма теперь. Вы не входите в основную оболочку так, как Вы входите в gui менеджер окон. Нет никакого главного окна, несколько отличающегося, чем какое-либо другое окно.
Мое предложение - не волнуется об этом различии, оно основано на более старом стиле использования Unix. Устраните различие в своих файлах. Все содержание .bash_profile должно быть:
[ -f $HOME/.bashrc ] && . $HOME/.bashrc
И помещенный все Вы на самом деле хотите установить в .bashrc
Помните, что .bashrc получен для всех оболочек, интерактивных и неинтерактивных. Можно сорвать определение источника для неинтерактивных оболочек путем помещения этого кода около вершины .bashrc:
[[ $- != *i* ]] && return