Глобальный bash_profile

20

Я понимаю, что есть /etc/profileи /etc/bashrcфайлы для установки глобальных переменных среды, и, возможно, я просто неправильно понимаю их цели, но ...

Есть ли глобальный bash_profileфайл?

Я использую Mac OS X

Hubro
источник

Ответы:

15

Это не называется 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, поэтому на этом мои знания заканчиваются.

ire_and_curses
источник
Не читайте /etc/bash.bashrcиз неинтерактивной оболочки. /etc/profileможет быть прочитан неинтерактивной оболочкой. Видите разницу между оболочкой входа и не входящей в систему оболочкой?
Жиль "ТАК - перестань быть злым"
@ Жиль - мне не понятно, что ты здесь пытаешься сделать. Неинтерактивная оболочка для входа - действительно необычная вещь. Для справки, код, который я цитирую, не является моим собственным творением. Это по умолчанию /etc/profileв Ubuntu 12.04. Что бы вы предложили вместо этого, если бы кто-то хотел, чтобы /etc/profileон выполнялся только под bash, а другой sh-совместимой оболочки не было?
ire_and_curses
Система /etc/profileфайлы для моей системы содержит комментарий в верхней части , который гласит: # System-wide .profile for sh(1). Это значит profileчто-то shконкретное? Работает ли shкак-то раньше bash?
@Josh Voigts - shэто подмножество bash. /etc/profileвыполняется для sh, bashи все другие Bourne-совместимые оболочки.
ire_and_curses
@ire_and_curses Похоже, файл вызывается /etc/bashrcна Mac, а не /etc/bash.bashrc. Это также, кажется, бежит /bin/shтакже.
BrainStorm.exe
4

/etc/profileявляется глобальным bash_profile. Нет никакого файла, специфичного для bash, bash просто читает стандартный файл, читаемый всеми оболочками в стиле Bourne. Вот где вы можете установить общесистемные переменные среды.

См. Есть ли ".bashrc" эквивалентный файл, прочитанный всеми оболочками? для общего обзора общих файлов запуска bash.

Жиль "ТАК - перестать быть злым
источник
0

Настройка интерактивной оболочки (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.

Colorize Grep в глобальном масштабе

/etc/bashrc.d/grep.sh

alias grep='grep --color=auto'

Вы можете сделать это с помощью одной строки:

printf "alias grep=\'grep --color=auto\'" > /etc/bashrc.d/grep.sh

Сравните profile.d против bashrc.d

Если, прочитав это, вы не будете убеждены, сделайте это, чтобы убедить себя:

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файлы

Джонатан Комар
источник