Дифференцировать интерактивный логин и неинтерактивную оболочку без входа

Я пытаюсь отличить эти четыре слова: логин, не-логин, интерактивный и неинтерактивный:

interactive - интерактивная оболочка для входа - интерактивная оболочка без входа - недействительная логическая оболочка - non-login shell

Как я понимаю логин, не-логин, интерактивный и неинтерактивный : запустите систему, войдите в систему и откройте терминал и не интерактивны - login shell: telnet to system и войти в систему

Но как насчет интерактивной оболочки входа? Вход в систему, открытие виртуального терминала и вход в систему? и неинтерактивный - не-login-оболочка, запускает ли автоматизированный скрипт в crontab?

1
задан 16 May 2017 в 07:35

2 ответа

По сути, является ли оболочка логином или нет, интерактивна или не имеет значения только по одной причине:

Файлы инициализации и установленные по умолчанию параметры зависят от того, является ли оболочка логином или нет и интерактивна или нет.

Соответственно, независимо от того, является ли оболочка логином или нет или интерактивна или нет, зависит только от используемого вызова - точного имени и параметров команды.

Эти два свойства в остальном ортогональны: 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 процесс входа в систему вообще не использует сценарии оболочки.

5
ответ дан 23 May 2018 в 01:49

Локальная оболочка:

Первый процесс, который выполняется под нашим идентификатором пользователя при входе в сеанс. Процесс входа в систему указывает, что оболочка будет вести себя как оболочка входа с условным обозначением: передать аргумент 0, который обычно является именем исполняемого файла оболочки, с символом «-», предшествующим

. Интерактивная оболочка: [!d3 ]

Первый процесс, который выполняется под нашим идентификатором пользователя при входе в сеанс. Процесс входа в систему говорит, что оболочка ведет себя как оболочка входа с условным обозначением: передавая аргумент 0, который обычно является именем исполняемого файла оболочки, с символом «-» preended

Reads от пользовательского ввода на tty. Помимо прочего, такая оболочка считывает загрузочные файлы при активации, отображает приглашение и включает управление заданиями по умолчанию. Пользователь может взаимодействовать с оболочкой. Оболочка, запускающая скрипт, всегда является неинтерактивной оболочкой.

3
ответ дан 23 May 2018 в 01:49
  • 1
    Итак, примеры, которые даны правильно. – d a i s y 3 February 2017 в 14:39
  • 2
    Да маргари в своем месте. – George Udosen 3 February 2017 в 14:44
  • 3
    @daisy no! Графический интерфейс не имеет к этому никакого отношения. Речь идет о оболочках командной строки, а не о графических оболочках (которые также существуют, но представляют собой другой зверь). – terdon♦ 3 February 2017 в 15:13
  • 4
    @George нет, есть две ошибки: регистрация через GUI не запускает оболочку входа (или любой другой вид соответствующей оболочки) и вход в удаленную систему через telnet запускает telnet-оболочку, но через ssh запускается интерактивный вход оболочка. – terdon♦ 3 February 2017 в 15:48
  • 5
    @George на самом деле, я стою исправлено. Некоторые администраторы входа в GUI могут запустить оболочку входа в систему, чтобы прочитать .profile (я думал, что они просто источник .profile вручную, но я могу ошибаться ). – terdon♦ 3 February 2017 в 15:58

Другие вопросы по тегам:

Похожие вопросы: