Ответы:
Это не называется 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
может быть прочитан неинтерактивной оболочкой. Видите разницу между оболочкой входа и не входящей в систему оболочкой?