Что такое login shell
и interactive shell
, а что есть .bash_profile
и .bashrc
?
В чем разница между оболочкой входа и интерактивной оболочкой?
Ответ 1
Интерактивная оболочка запускается без аргументов без опций, если не указано -s, без указания опции -c и чей вход и выход ошибки подключены к клеммам (как определено по isatty (3)) или запустили с опцией -i.
Интерактивная оболочка обычно читает и пишет пользователям Терминал.
Оболочка входа - это оболочка, в которую вы входите. Вы можете распознать оболочку входа в список ps -f
, в начале названия программы будет стоять дефис, например:
root 3561 3553 0 09:38 pts/0 00:00:00 -bash
qa 7327 3432 0 10:46 pts/1 00:00:00 -bash
Интерактивная оболочка - это оболочка, которая читает команды из стандартного -i nput, обычно это терминал.
Например, если вы войдете в bash с использованием xterm или эмулятора терминала, такого как putty
, тогда сессия будет как оболочкой входа, так и интерактивной. Затем, если вы наберете bash
, вы войдете в интерактивную оболочку, но это не оболочка входа в систему.
Если запускается сценарий оболочки (файл, содержащий команды оболочки), то он не является ни оболочкой входа в систему, ни интерактивной.
Загрузочные файлы очень удобны в bash:
Когда вызывается оболочка bash для входа в систему, источник /etc/profile
(выполняется в текущей среде). После этого три файла проверяются на наличие. Проверки этих файлов выполняются в следующем порядке:
если существует /etc/profile
, отправьте (запустите) его
если существует ~/.bash_profile
, отправьте (запустите) его
если существует ~/.bash_login
, отправьте (запустите) его
если существует ~/.profile
, отправьте (запустите) его
Как только совпадение найдено, другие файлы игнорируются, даже если они существуют. Файл /etc/bashrc
может использоваться как файлами ~/.bash_profile
, так и файлами ~/.bashrc
. Это будет означать, что файл /etc/bashrc
создается на всех интерактивных вызовах bash, независимо от того, является ли он оболочкой для входа или не входа в систему.
Таким образом, файл .bashrc
также запускается каждый раз, когда вы запрашиваете новую интерактивную оболочку. Это не включает сценарий оболочки. Обычно переменные, псевдонимы или функции помещаются в этот файл.
Сценарии оболочки Bash читают другой файл, если это необходимо. Если пользователь определяет (обычно в своем собственном .bash_profile
) переменную BASH_ENV
, которая содержит имя файла, сценарии прочтут это. Если эта переменная не установлена (и не экспортирована), сценарии bash не будут читать файлы запуска.
Ответ 2
Поскольку вы, вероятно, знаете, что такое "оболочка" и использует его, ваш вопрос касается только разницы между оболочкой входа и всем остальным...
Оболочка для входа отличается от любой другой оболочки тем фактом, что при запуске загружается один или несколько начальных сценариев установки (ресурсов), обычно называемых с именем "profile". в котором определены базовые настройки, которые выводятся для впоследствии открытых оболочек (поэтому их нужно только определить один раз).