Глобальний файл bash_profile


20

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

Чи є глобальний bash_profileфайл?

Я використовую Mac OS X

Відповіді:


15

Це не називається bash_profile, але стандартне місце для глобальної конфігурації bash /etc/bash.bashrc. Зазвичай це називають, /etc/profileякщо шкаралупа не забита. Наприклад, у /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, тому що цільовим файлом профілю є контроль поведінки для оболонок входу. Зазвичай все, що ви хочете там зробити, не буде специфічним для башти. /etc/bash.bashrcє специфічним для bash і буде працювати як для оболонок для входу, так і для не входу в систему.

Щоб ще більше ускладнити речі, схоже, що в OS X навіть немає /etc/bash.bashrc. Це, мабуть, пов’язано з тим, що термінали в OS X за замовчуванням працюють як оболонки для входу , тому відмінність втрачається:

Виняток із настанов вікна терміналів - це Terminal.app Mac OS X, який за замовчуванням виконує оболонку входу для кожного нового вікна терміналу, викликаючи .bash_profile замість .bashrc. Інші емулятори терміналів GUI можуть робити те саме, але більшість, як правило, не роблять цього.

Я не запускаю OS X, тому обсяг моїх знань закінчується на цьому.


Не читайте /etc/bash.bashrcз неінтерактивної оболонки. /etc/profileможе читатися неінтерактивною оболонкою. Дивіться різницю між оболонкою для входу та оболонкою без входу?
Жил "ТАК - перестань бути злим"

@Gilles - Мені не зрозуміло, яку точку ти тут намагаєшся зробити. Неінтерактивна оболонка для входу - справді незвичайна річ. Для довідки, коду, який я цитую, - це не моє власне створення. Це за замовчуванням /etc/profileв Ubuntu 12.04. Що б ви замість цього запропонували, якби хотіли, щоб /etc/profileвиконувались тільки під bash, а жодна інша сумісна з ш-оболонкою?
ire_and_curses

Система /etc/profileфайли для моєї системи містить коментар у верхній частині , де йдеться: # System-wide .profile for sh(1). Чи означає це, що profileє shспецифічним? Чи shякось біжить раніше bash?

@Josh Voigts - shце підмножина bash. /etc/profileвиконується для sh, bashта всіх інших сумісних з Борном снарядів.
ire_and_curses

@ire_and_curses Здається, що файл викликається /etc/bashrcна mac, не /etc/bash.bashrc. Це також, здається, працює /bin/sh.
BrainStorm.exe

4

/etc/profileє глобальним bash_profile. Немає файлу, специфічного для bash, bash просто зчитує стандартний файл, прочитаний усіма оболонками у стилі Борна. Ось тут ви можете встановити змінні середовища для всієї системи.

Див. Чи є еквівалентний файл ".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 налаштувань до глобального інтерактивного файлу оболонки, помістивши нові .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

Порівняйте 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файлів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.