Essentiellement, que le shell soit connecté ou non, interactif ou non importe pour exactement une raison:
Les fichiers d'initialisation et les options par défaut définies varient selon qu'un shell est connecté ou non et interactif ou non.
De même, le fait qu'un shell soit connecté ou non, interactif ou non dépend uniquement de l' invocation utilisée - le nom de la commande exacte et les options.
Les deux propriétés sont par ailleurs orthogonales - qu'un shell soit connecté ou non n'a aucune incidence sur la détermination de son interactivité ou non.
Bash démarre un shell de connexion si l'une d'entre elles est vraie:
argv[0]
, le nom de la commande sous laquelle il a été invoqué commence par un -
- l'
-l
option est spécifiée
De même, bash démarre un shell interactif si l'une d'entre elles est vraie:
- il n'a pas été spécifié de fichier à exécuter (c'est-à-dire que la commande ne l'était pas
bash some/file
) ou de chaîne de commande à exécuter ( bash -c 'foo'
) (la condition réelle est un peu plus complexe, voir le manuel)
- l'
-i
option a été spécifiée
Notamment (et paradoxalement), ce dernier implique que bash -ic 'foo'
démarre un shell interactif.
Donc, ce qui suit démarre une connexion, un shell interactif, même s'il n'a rien d'interactif et que l'invocation n'a rien à voir avec la connexion:
bash -lic true
La connexion via la console ou l'interface graphique démarre un shell de connexion (ou peut-être pas) est entièrement un effet du processus de connexion utilisant l'invocation appropriée.
Les conditions et les effets sont décrits en détail dans le manuel bash, section sur les fichiers de démarrage .
Une source majeure de confusion est qu'il existe une autre signification courante pour le shell "login":
Le shell de connexion d'un utilisateur est le shell défini dans l' passwd
entrée de cet utilisateur (qui peut provenir de /etc/passwd
LDAP ou d'une autre source).
Le login
programme, SSH, etc. démarre ce shell en tant que shell de connexion dans le sens que l'on entend dans le reste de la réponse - avec un début -
dans le nom de la commande, généralement. Si vous vouliez être particulièrement déroutant, vous pourriez dire:
Certains processus de connexion démarrent le shell de connexion de l'utilisateur en tant que shell de connexion.
Notez que la connexion à l'interface graphique démarre un shell de connexion uniquement parce que les développeurs l'ont jugé pratique - LightDM exécute un script à la connexion qui n'est évidemment pas interactif et ne dépend certainement pas du shell de connexion de l'utilisateur (dans le deuxième sens). Cependant, ne dépendez pas du gestionnaire d'affichage qui démarre un shell de connexion - pas tous, et de Wayland et GNOME, le processus de connexion n'utilise pas du tout de scripts shell.
non-interactive login shell
est incorrect.