| Май 2008 | ||||||
| ПН | ВТ | СР | ЧТ | ПТ | СБ | ВС |
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
Bash Shell может быть запущен в двух режимах: как interactive и non-interactive. Первый, в свою очередь, может быть login и non-login типа. Итак,
| Режимы работы Bash Shell | ||
| interactive | non-interactive | |
| login | non-login | |
Если не углубляться в подробности, то login interactive shell — это то, что видит пользователь, когда входит в систему; non-login interactive shells — это все остальные экземпляры интерпретатора, с которыми пользователь работает в интерактивном режиме, non-interactive shells — это копии интерпретатора, запущенные при исполнении командных файлов (например, тех, что начинаются со строчек #!/bin/sh или #!/usr/bin/bash).
Опять же, если не копать слишком глубоко, то login interactive shell при запуске читает файлы /etc/profile и ~/.profile, а когда завершается — ~/.bash_logout; non-login interactive shell читает файл ~/.bashrc. Некоторые вещи разумно (или необходимо!) выполнять лишь при запуске login interactive shell (например, /usr/bin/fortune), а переменные окружения и алиасы обычно одни и те же для обоих типов interactive shells; потому, если это уже не сделано системным администратором или разработчиками дистрибутива (как, например, в GNU/Linux от SuSE) для /etc/profile, то в самом начале ~/.profile имеет смысл прописать команду
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
, а все эти alias, source, export и прочее делать в ~/.bashrc. Non-interactive shell наследует уже имеющиеся настройки и по умолчанию не читает никаких конфигурационных файлов. Итак,
| Порядок чтения конфигурационных файлов | ||
| interactive | non-interactive | |
| login | non-login | |
/etc/profile |
||
~/.bashrc |
||
~/.profile |
||
~/.bash_logout |
||
Переменные окружения, выставленные при запуске login interactive shell, естественно, доступны и во всех остальных режимах работы интерпретатора:
| Сфера действия конфигурационных файлов | ||
| interactive | non-interactive | |
| login | non-login | |
~/.profile |
||
~/.bashrc |
||
На системах, с которыми работаю я, login interactive shell отличается от остальных экземпляров интерпретатора только тем, что при запуске системы я вижу в нем очередное fortune-изречение, а при его завершении вызывается cleanup/backup-скрипт.