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