На этот вопрос уже есть ответ здесь:
- Разница между ответами .bashrc и .bash_profile 6
Это неудобно, но после многих лет использования POSIX систем Полного времени, я до сих пор трудно понять, если оболочка настройка должна идти .bashrc
, .profile
или где - нибудь еще. Не говоря уже о некоторых специфичных для ОС конфигурационных файлах, таких как .pam_environment
.
Да, я знаю, как разобраться в документации и узнать, когда каждый файл загружен или не загружен. Что меня интересует, так это то, что у всех есть полные рекомендации о том, как решить, в какой файл поместить данный тип настройки.
Ответы:
TL; DR:
~/.bash_profile
должно быть очень простым и просто загрузить.profile
и.bashrc
(в таком порядке)~/.profile
имеет материал, НЕ конкретно связанный с bash, такой как переменные окружения (PATH
и друзья)~/.bashrc
есть все, что вы хотите в интерактивной командной строке. Командная строка,EDITOR
переменные, псевдонимы bash для моего использованияНесколько других заметок:
Все, что должно быть доступно для графических приложений ИЛИ для sh (или для вызова bash
sh
) ДОЛЖНО быть в~/.profile
~/.bashrc
не должен ничего выводитьВсе, что должно быть доступно только для входа в систему, должно входить в
~/.profile
Убедитесь, что
~/.bash_login
не существует.источник
~/.profile
правильно установить среду для таких сервисов, как GDM / LightDM / LXDM, которые явно запускают / bin / sh..bashrc
выводы довольно много вещей, вы можете прокомментировать это? В частности, где я должен поместить приветствие?[[ $- == *i* ]]
поиск «i» в специальной$-
переменной. Конечно, это важно только в первую очередь в системах, где bash компилируется для чтения.bashrc
в неинтерактивном режиме. (То есть, Debian , но не Arch.) Но это частая причина загадочных сообщений об ошибках при попытке подключения с использованиемsftp
илиscp
похожими инструментами..bash_profile
и.profile
. Но Bash читает только первый из трех. Значит, если есть.bash_login
, то и то,.profile
и другое.bash_profile
будет загадочно игнорироваться.За последние несколько лет, у меня было много времени , чтобы тратить, так что я уже исследовал это для немного больше , чем просто 10 минут. Я понятия не имею, если это лучший макет, он работает правильно почти во всех случаях.
Требования:
~/.profile
должен быть совместим с любым / bin / sh - это включает в себя bash, dash, ksh, все, что дистрибутив может использовать.Переменные среды должны быть помещены в файл, который читается как консольными именами входа (т. Е. Оболочкой «входа в систему»), так и графическими именами входа (т. Е. Менеджерами отображения, такими как GDM, LightDM или LXDM).
Нет смысла иметь и то
~/.profile
и другое~/.bash_profile
. Если последнее отсутствует, bash с радостью использует первое, и любые специфичные для bash строки могут быть защищены проверкой на$BASH
или$BASH_VERSION
.Разделение между
*profile
и*rc
заключается в том, что первый используется для оболочек «входа», а второй - каждый раз, когда вы открываете окно терминала. Однако, bash в режиме 'login' не является источником~/.bashrc
, поэтому~/.profile
должен делать это вручную.Самая простая конфигурация будет:
Имейте a,
~/.profile
который устанавливает все переменные окружения (кроме специфичных для bash), возможно, печатает одну или две строки, а затем источники,~/.bashrc
если они запускаются с помощью bash, иначе придерживаясь sh-совместимого синтаксиса.Имейте a,
~/.bashrc
который выполняет любую специфическую для оболочки настройку, защищенную проверкой интерактивного режима, чтобы избежать поломок, какsftp
в Debian (где bash скомпилирован с возможностью загрузки~/.bashrc
даже для неинтерактивных оболочек):Тем не менее, существует также проблема, связанная с тем, что некоторые неинтерактивные команды (например
ssh <host> ls
) пропускаются~/.profile
, но переменные окружения будут для них очень полезны.Некоторые дистрибутивы (например, Debian) компилируют свои bash с возможностью создания источника
~/.bashrc
для таких неинтерактивных имен входа. В этом случае я счел полезным переместить все переменные среды (export ...
строки) в отдельный файл~/.environ
, а также получить его из обоих источников.profile
и.bashrc
с защитой, чтобы не делать это дважды:К сожалению, для других дистрибутивов (например, Arch) я не нашел очень хорошего решения. Одной из возможностей является использование модуля PAM (включенного по умолчанию) pam_env, добавив следующее
~/.pam_environment
:Тогда, конечно, обновление
~/.environ
доunset BASH_ENV
.Заключение? Снаряды - это боль. Переменные среды - это боль. Определяемые распределением опции времени компиляции - огромная боль в заднице.
источник
.profile
и.bashrc
от.bash_profile
и держать в.profile
чистоте..profile
чистый , спасибо.~/.profile
и другое~/.bash_profile
»: я не согласен. Смотрите ответ Дэна, почему..profile
и защищать только определенныеbash
части с помощью условных обозначений .Взгляните на этот отличный пост в блоге ShreevatsaR . Вот выдержка, но перейдите к сообщению в блоге, оно включает в себя объяснение таких терминов, как «оболочка входа», блок-схема и аналогичная таблица для Zsh.
источник
/etc/profile
звонки/etc/bash.bashrc
и~/.profile
звонки~.bashrc
. Так эффективно,/etc/bash.bashrc
и~/.bashrc
выполняются для интерактивных входов в систему./bin/sh
BASH_ENV
). Соответствующий абзац справочной страницы bash можно найти, выполнив поискIf bash is invoked with the name sh
.Я предлагаю вам свои «всеобъемлющие» рекомендации:
.bash_profile
и.profile
загрузите,.bashrc
если он существует, используя, например,[ -r $HOME/.bashrc ] && source $HOME/.bashrc
.bashrc
.РЕДАКТИРОВАТЬ: Добавил напугать кавычки на «всеобъемлющий» на тот случай, если кто-нибудь соблазниться в это поверить. ;)
источник
.bash_profile
и.profile
немного избыточно; вам нужно только последнее. Вы должны сделать это / bin / sh-proof, хотя:if [ "$BASH" ] && [ -r ~/.bashrc ]; then . ~/.bashrc; fi
поскольку есть программы (а именно gdm / lightdm), которые вручную получают файл из скрипта / bin / sh. Это также означает, что сохраняемая среда.bashrc
будет неэффективной. Пришлось -1, так как ваши «всеобъемлющие» рекомендации не будут работать на многих системах, как я несколько раз обнаружил на своем пути.Я прекратил попытки выяснить это и сделал один скрипт (
~/.shell-setup
), который я получаю от всех остальных.Этот подход требует
~/.shell-setup
двух функций:# 1 довольно стандартный, хотя, возможно, не используется в сценариях оболочки.
№2 сложнее. Вот что я использую в bash:
К сожалению, я не помню, как я придумал это, или почему обнаружения интерактивной оболочки было недостаточно.
источник
Положите все,
.bashrc
а затем источник.bashrc
из.profile
Со страницы руководства bash (на OS X 10.9):
Приведенный выше текст, почему все вставлено
.bashrc
. Однако, когда вы работаете с оболочкой входа в систему, поведение несколько иное. Опять цитата из справочной страницы:.profile
читается для логинов, но.bashrc
нет. Дублирование всего этого.bashrc
- плохо ™, поэтому нам нужно найти его,.profile
чтобы поведение оставалось последовательным.Тем не менее, вы не хотите , чтобы источник
.bashrc
из.profile
безоговорочно. Пожалуйста, смотрите комментарии и другие ответы для получения дополнительной информации.источник
.bashrc
с.profile
. Смотрите ответ @ DanRabinowitz.[ -n "$BASH" -a -f ~/.bashrc ] && . ~/.bashrc
был бы сладким вкладышем для.profile
.