Le shell ou l'interpréteur de commandes est un programme spécialisé dont le rôle est de permettre les interactions avec le système d'exploitation. C'est une interface qui peut être utilisée soit par un opérateur humain soit par un programme. On distingues plusieurs modes de fonctionnement et d'invocation:
Modes de fonctionnement:
Modes d'invocation:
On retrouve au final 4 types de shell:
La documentation de bash indique que pour le shell de login, la variable réservée $0 préfixe le nom du script par le caractère “-”
.
# Connexion SSH à un serveur distant pour démarrer un shell de login interactif (IL) ssh user@host.example.com # Affiche la valeur de $0 echo $0 -bash # invocation d'un nouveau shell et affichage de la variable $0 bash -i -s echo $0 bash
Depuis un shell interactif, on peut utiliser la primitive exec pour remplacer le processus courant par un interpréteur nommé “-bash”:
# L'interpréteur courant est en mode interactif # mais 'est pas un shell de login echo $$ 83679 shopt login_shell login_shell off # Ici on remplace l’exécution courante par un nouvel interpréteur bash nommé "-bash" exec -a "-bash" bash echo $0 -bash # Le PID est identique echo $$ 83679 # mais l'option login_shell est bien active shopt login_shell login_shell on
Le fait d'avoir nommé explicitement le programme “-bash” a permis de positionner correctement la valeur de la variable login_shell.
Pour qu'un shell soit considéré comme shell de login, il suffit de positionner l'option -l lors de son l'invocation:
# Affiche le PID du shell courant echo PID=$$ PID=5508 # Détermine si le shell courant est un shell de login: shopt login_shell login_shell off # Invoque un nouveau shell avec l'option -l (login_shell) # et exécute les commandes passées à l'option -c /bin/bash -l -i -c 'echo $0; echo PID=$$; shopt login_shell; pstree -p -s -h $$' /bin/bash PID=37394 login_shell on systemd(1)───systemd(4262)───gnome-terminal-(4965)───bash(4973)───screen(5506)───screen(5507)───bash(5508)───bash(37394)───pstree(37401)