Я пытаюсь отличить эти четыре слова: логин, не-логин, интерактивный и неинтерактивный:
interactive - интерактивная оболочка для входа - интерактивная оболочка без входа - недействительная логическая оболочка - non-login shellКак я понимаю логин, не-логин, интерактивный и неинтерактивный : запустите систему, войдите в систему и откройте терминал и не интерактивны - login shell: telnet to system и войти в систему
Но как насчет интерактивной оболочки входа? Вход в систему, открытие виртуального терминала и вход в систему? и неинтерактивный - не-login-оболочка, запускает ли автоматизированный скрипт в crontab?
По сути, является ли оболочка логином или нет, интерактивна или не имеет значения только по одной причине:
Соответственно, независимо от того, является ли оболочка логином или нет или интерактивна или нет, зависит только от используемого вызова - точного имени и параметров команды.
Эти два свойства в остальном ортогональны: shell имеет логин или нет, не имеет никакого отношения к определению, является ли он интерактивным или нет.
Bash запускает оболочку входа, если любое из них истинно:
argv[0], имя команда была вызвана как, начинается с -, опция -l указанаАналогично, bash запускает интерактивную оболочку, если любое из них истинно:
argv[0], имя команды, которую он вызывал как, начинается с - , была указана опция -iПримечательно (и, как это ни парадоксально), последнее означает, что bash -ic 'foo' запускает интерактивную оболочку.
Таким образом, следующее запускает интерактивную оболочку входа в систему, хотя в ней нет ничего интерактивного, и вызов не имеет ничего общего с входом в систему:
bash -lic true
Вход в систему через консоль или графический интерфейс запускает оболочку входа (или, возможно, нет), полностью влияет на процесс входа в систему с помощью соответствующего вызова.
Условия и эффекты подробно описаны в руководстве bash, раздел «Файлы запуска». [!d16 ]
Основной источник недоразумений заключается в том, что существует другое общее значение для оболочки «login»:
invocation
[d22 ] Программа login, SSH и т. Д. Запускают эту оболочку в качестве оболочки входа в смысл, обозначенный в остальном ответе, - как правило, с ведущим - в имени команды. Если вы хотели быть особенно запутанным, вы могли бы сказать:Некоторые процессы входа в систему запускают оболочку входа пользователя в качестве оболочки входа.
Обратите внимание, что вход в GUI запускает логин потому что разработчики считали это удобным - LightDM запускает скрипт при входе в систему, который явно не является интерактивным и, конечно же, не зависит от оболочки входа пользователя (во втором смысле). Не зависеть от диспетчера дисплея, запускающего оболочку входа, хотя и не всех из них, и на Wayland и GNOME процесс входа в систему вообще не использует сценарии оболочки.
Локальная оболочка:
Первый процесс, который выполняется под нашим идентификатором пользователя при входе в сеанс. Процесс входа в систему указывает, что оболочка будет вести себя как оболочка входа с условным обозначением: передать аргумент 0, который обычно является именем исполняемого файла оболочки, с символом «-», предшествующим. Интерактивная оболочка: [!d3 ] Первый процесс, который выполняется под нашим идентификатором пользователя при входе в сеанс. Процесс входа в систему говорит, что оболочка ведет себя как оболочка входа с условным обозначением: передавая аргумент 0, который обычно является именем исполняемого файла оболочки, с символом «-» preended
Reads от пользовательского ввода на tty. Помимо прочего, такая оболочка считывает загрузочные файлы при активации, отображает приглашение и включает управление заданиями по умолчанию. Пользователь может взаимодействовать с оболочкой. Оболочка, запускающая скрипт, всегда является неинтерактивной оболочкой.