Outils pour utilisateurs

Outils du site


sysadmin:linux:shell

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
sysadmin:linux:shell [2021/11/09 21:08] – créée yoannsysadmin:linux:shell [2023/01/19 09:26] (Version actuelle) yoann
Ligne 23: Ligne 23:
 ===== Identifier le shell de login ===== ===== Identifier le shell de login =====
  
-La documentation du shell bash indique que  pour le shell de login, la variable réservée **$0** préfixe le nom du script par le caractère ''"**-**"''.+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 ''"**-**"''.
  
 <code bash> <code bash>
Ligne 40: Ligne 40:
 </code> </code>
  
 +Depuis un shell interactif, on peut utiliser la primitive **exec** pour remplacer le processus courant par un interpréteur nommé "-bash":
 +
 +<code 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
 +</code>
 +
 +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:
 +
 +<code bash>
 +# 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)
 +</code>
sysadmin/linux/shell.1636492093.txt.gz · Dernière modification : 2021/11/09 21:08 de yoann