Esencialmente, si un shell es de inicio de sesión o no, interactivo o no importa por exactamente una razón:
Los archivos de inicialización y las opciones predeterminadas establecidas dependen de si un shell es de inicio de sesión o no e interactivo o no.
En consecuencia, si un shell es de inicio de sesión o no o interactivo o no depende únicamente de la invocación utilizada: el nombre exacto del comando y las opciones.
De lo contrario, las dos propiedades son ortogonales: si un shell es de inicio de sesión o no, no influye en determinar si es interactivo o no.
Bash inicia un shell de inicio de sesión si alguno de estos es verdadero:
argv[0]
, el nombre del comando con el que se invocó comienza con un -
- la
-l
opción está especificada
De manera similar, bash inicia un shell interactivo si alguno de estos es verdadero:
- no se especificó un archivo para ejecutar (es decir, el comando no fue
bash some/file
) o una cadena de comando para ejecutar ( bash -c 'foo'
) (la condición real es un poco más compleja, consulte el manual)
- la
-i
opción fue especificada
Notablemente (y paradójicamente), esto último implica que bash -ic 'foo'
comienza un shell interactivo.
Entonces, lo siguiente inicia un inicio de sesión, un shell interactivo, aunque no tiene nada de interactivo y la invocación no tuvo nada que ver con el inicio de sesión:
bash -lic true
El inicio de sesión a través de la consola o la GUI inicia un shell de inicio de sesión (o tal vez no) es un efecto del proceso de inicio de sesión utilizando la invocación adecuada.
Las condiciones y los efectos se describen en detalle en el manual de bash, sección sobre Archivos de inicio .
Una fuente importante de confusión es que hay otro significado común para el shell de "inicio de sesión":
El shell de inicio de sesión de un usuario es el shell definido en la passwd
entrada de ese usuario (que puede provenir de /etc/passwd
, LDAP o alguna otra fuente).
El login
programa, SSH, etc. inicia este shell como un shell de inicio de sesión en el sentido que se entiende en el resto de la respuesta, con un encabezado -
en el nombre del comando, por lo general. Si quisieras ser particularmente confuso, podrías decir:
Algunos procesos de inicio de sesión inician el shell de inicio de sesión del usuario como un shell de inicio de sesión.
Tenga en cuenta que el inicio de sesión GUI inicia un shell de inicio de sesión simplemente porque los desarrolladores lo consideraron conveniente: LightDM ejecuta un script de inicio de sesión que obviamente no es interactivo y ciertamente no depende del shell de inicio de sesión del usuario (en el segundo sentido). Sin embargo, no dependa de que el administrador de pantalla inicie un shell de inicio de sesión; no todos lo hacen, y en Wayland y GNOME, el proceso de inicio de sesión no utiliza scripts de shell.
non-interactive login shell
es incorrecto.