По сути, является ли оболочка логином или нет, интерактивной или нет, имеет значение только по одной причине:
Файлы инициализации и набор параметров по умолчанию зависят от того, является ли оболочка логином или нет, интерактивной или нет.
Соответственно, является ли оболочка логином или нет, интерактивной или нет, зависит исключительно от используемого вызова - точного имени команды и параметров.
Два свойства являются ортогональными, независимо от того, является ли оболочка логином или нет, не имеет отношения к определению, является ли она интерактивной или нет.
Bash запускает оболочку входа в систему, если любое из них верно:
argv[0]
имя команды, с которой она была вызвана, начинается с -
-l
задана опция
Аналогично, bash запускает интерактивную оболочку, если любое из них верно:
- не был указан файл для выполнения (т. е. команда не была
bash some/file
) или строка команды для запуска ( bash -c 'foo'
) (фактическое условие немного сложнее, см. руководство)
-i
была указана опция
Причем (как это ни парадоксально) последнее подразумевает, что bash -ic 'foo'
запускается интерактивная оболочка.
Таким образом, следующее запускает интерактивную оболочку входа в систему, даже если она не имеет ничего общего с интерактивом и вызов не имеет ничего общего с входом в систему:
bash -lic true
То, что вход в систему через консоль или графический интерфейс запускает оболочку входа (или, возможно, нет), полностью зависит от процесса входа в систему с использованием соответствующего вызова.
Условия и эффекты подробно описаны в руководстве по bash, раздел «Файлы запуска» .
Основной источник путаницы заключается в том, что для оболочки «login» есть еще одно общее значение:
Оболочка входа пользователя - это оболочка, определенная в записи этого пользователя passwd
(которая может исходить из /etc/passwd
LDAP или другого источника).
login
Программа, SSH и т.д. запустить эту оболочку в качестве логина оболочки в смысле означает в остальной части ответа - с ведущим -
в имени команды, как правило. Если вы хотите быть особенно запутанным, вы можете сказать:
Некоторые процессы входа в систему запускают оболочку входа пользователя как оболочку входа.
Обратите внимание, что вход в GUI запускает оболочку входа исключительно потому, что разработчики посчитали это удобным - LightDM запускает сценарий входа в систему, который, очевидно, не является интерактивным и, конечно же, не зависит от оболочки входа пользователя (во втором смысле). Не зависите от диспетчера отображения, запускающего оболочку входа, хотя - не все из них, а на Wayland и GNOME процесс входа вообще не использует сценарии оболочки.
non-interactive login shell
.