Типы запуска командной оболочки
Interctive login shell запускается, когда пользователь входит в систему посредством ввода логина и пароля (выполняется скрипт /bin/login и введенный пароль проверяется посредством /etc/passwd).
Interactive non login shell запускается, когда пользователь запускает оболочку без ввода пароля:
* [prompt]/bin/bash --
* su username (без минуса копирует родительское окружение, с минусом не копирует)
* xterm, console из графического интерфейса
Файлы, выполняющиеся при запуске командной оболочки
- /etc/profile -- запускается при любом входе в любую оболочку
- ~/.bashrc -- вход без логина (например, родительская оболочка установлена в ksh, в ней мы вызываем bash командой. Если мы хотим инициализировать переменные, то делаем это в этом файле).
- ~/.bash_profile -- вход с логином
- /etc/bashrc -- обычно существует и вызывается из ~/.bashrc (вызов пишется ручками, см. ниже)
- /etc/profile.d/*.sh -- вызывается из /etc/profile (вызов пишется ручками, см. ниже)
Взаимосвязи между файлами
На примере типичной конфигурации
1. ~/.bashrc вызывается из ~/.bash_profile. Если создавался пользователем самостоятельно, то этого важного вызова может и не быть
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
2. /etc/bashrc из ~/.bashrc
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
3. /etc/profile.d/*.sh из /etc/profile
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. $i
else
. $i >/dev/null 2>&1
fi
fi
done
4. /etc/profile.d/*.sh из /etc/bashrc
# Only display echos from profile.d scripts if we are no login shell
# and interactive - otherwise just process them to set envvars
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. $i
else
. $i >/dev/null 2>&1
fi
fi
done
Тестирование запуска оболочек
Добавим в указанные выше файлы /etc/profile, ~/.bash_profile, ~/.bashrc, /etc/bashrc, /etc/profile.d/testbash.sh строчку с заполнением название скрипта в лог. Строка добавлена в конец файла, так что при вызове другого файла сначала появляется запись о другом файле, потом о текущем
При обычном входе с логином паролем
script name: /etc/profile.d/testbash.sh
script name: /etc/profile
script name: /etc/bashrc
script name: roots .bashrc
script name: roots .bash_profile
su - Запуск без сохранения окружения
script name: /etc/profile.d/testbash.sh
script name: /etc/profile
script name: /etc/bashrc
script name: roots .bashrc
script name: roots .bash_profile
su Запуск с сохранением окружения
script name: /etc/profile.d/testbash.sh
script name: /etc/bashrc
script name: roots .bashrc
Запуск скрипта
#!/bin/bash
echo Hello
ПУСТО
Запуск другой оболочки /bin/ksh
ПУСТО
Запуск /bin/bash
script name: /etc/profile.d/testbash.sh
script name: /etc/bashrc
script name: oracles .bashrc
Выводы
Лучше всего окружение настраивать в .bashrc, убедившись, что в .bash_profile есть ссылка на .bashrc
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
За более подробной информацией: info bash
По материалам статьи http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html
Комментариев нет:
Отправить комментарий