Ответы:
Это не называется bash_profile, но стандартным местом для глобальной конфигурации bash является /etc/bash.bashrc. Обычно это вызывается, /etc/profileесли оболочка bash. Например, по моему у /etc/profileменя есть:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1=’0
if [ ‐f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
fi
fi
С точки зрения использования, /etc/profileобеспечивает общесистемную конфигурацию для всех совместимых с Bourne оболочек (sh, bash, ksh и т. Д.). Обычно нет необходимости в аналоге /etc/bash_profile, поскольку целью файла профиля является управление поведением для оболочек входа в систему. Обычно все, что вы хотите сделать, не зависит от bash. /etc/bash.bashrcявляется специфичным для bash и будет работать как для входа в систему, так и для входа в систему без входа в систему.
Чтобы еще больше усложнить ситуацию, похоже, что OS X даже не имеет /etc/bash.bashrc. Вероятно, это связано с тем, что терминалы в OS X по умолчанию работают в качестве оболочек входа , поэтому различие потеряно:
Исключением из правил окна терминала является Mac.X Terminal.app, который запускает оболочку входа по умолчанию для каждого нового окна терминала, вызывая .bash_profile вместо .bashrc. Другие эмуляторы терминала GUI могут делать то же самое, но большинство этого не делают.
Я не использую OS X, поэтому на этом мои знания заканчиваются.
/etc/profileв Ubuntu 12.04. Что бы вы предложили вместо этого, если бы кто-то хотел, чтобы /etc/profileон выполнялся только под bash, а другой sh-совместимой оболочки не было?
/etc/profileфайлы для моей системы содержит комментарий в верхней части , который гласит: # System-wide .profile for sh(1). Это значит profileчто-то shконкретное? Работает ли shкак-то раньше bash?
shэто подмножество bash. /etc/profileвыполняется для sh, bashи все другие Bourne-совместимые оболочки.
/etc/bashrcна Mac, а не /etc/bash.bashrc. Это также, кажется, бежит /bin/shтакже.
/etc/profileявляется глобальным bash_profile. Нет никакого файла, специфичного для bash, bash просто читает стандартный файл, читаемый всеми оболочками в стиле Bourne. Вот где вы можете установить общесистемные переменные среды.
См. Есть ли ".bashrc" эквивалентный файл, прочитанный всеми оболочками? для общего обзора общих файлов запуска bash.
Это не загружается /etc/profile, так что ничего в/etc/profile.d/ не загружается (в отличие от логинов, смотрите конец).
Глобальный файл для этого - / etc / bashrc или /etc/bash.bashrc (в зависимости от -DSYS_BASHRC=флага, установленного во время компиляции):
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
return
fi
PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
Обычно рекомендуется оставить этот файл как есть (насколько это возможно), чтобы избежать конфликтов. Стратегия, которую я использую, похожа на ту, которую используют оболочки (/ etc / profile).
Моя стратегия заключается в добавлении загрузчика в указанный выше файл:
# Add new directory analog to /etc/profile.d
mkdir /etc/bashrc.d
# Write the loader to /etc/bash.bashrc (it might be /etc/bashrc on as mentioned above)
cat >> /etc/bash.bashrc << 'EOF'
# I appended this: Load scripts from /etc/bashrc.d
if test -d /etc/bashrc.d; then
for script in /etc/bashrc.d/*.sh; do
test -r "$script" && . "$script"
done
unset item
fi
EOF
Теперь я могу легко добавить n настроек в глобальный интерактивный (bash) файл оболочки, поместив новые файлы .shfiles в каталог /etc/bashrc.d.
/etc/bashrc.d/grep.sh
alias grep='grep --color=auto'
Вы можете сделать это с помощью одной строки:
printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh
Если, прочитав это, вы не будете убеждены, сделайте это, чтобы убедить себя:
printf "alias grep=\'grep --color=auto\'" > /etc/profile.d/grep.sh
Откройте новый эмулятор терминала и найдите какое-нибудь общее слово в вашем пользовательском каталоге, например «the», используя grep
grep -r 'the'
Ничто не должно быть цветным. Сделайте то же самое в виртуальной консоли, выполнив CTRLALTF1 (помните, что ваш X-сервер, вероятно, работает на CTRLALTF7, чтобы вы могли переключиться обратно. Если вы забыли, просто перезапустите менеджер рабочего стола, например)
grep -r 'the'
даст цветные результаты по желанию.
Ничто не должно быть цветным. Сделайте то же самое в виртуальной консоли, выполнив CTRLALTF1(помните, что ваш X-сервер, вероятно, работает на CTRLALTF7этом, чтобы вы могли переключиться обратно. Если вы забыли, просто перезапустите менеджер рабочего стола, например)
grep -r 'the'
даст цветные результаты по желанию.
Оболочка входа в систему - это то, что вы получаете, когда загружаете машину или переключаете виртуальные консоли CTRLALTF1через FNthвиртуальную консоль.
Оболочка для входа загружает, /etc/profileа загружает /etc/profile.d/*.shфайлы
/etc/bash.bashrcиз неинтерактивной оболочки./etc/profileможет быть прочитан неинтерактивной оболочкой. Видите разницу между оболочкой входа и не входящей в систему оболочкой?