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

Les deux révisions précédentesRévision précédente
sysadmin:linux:shell [2022/01/14 16:57] – Complément invocation d'un shell de login 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 39: Ligne 39:
 bash bash
 </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: Pour qu'un shell soit considéré comme shell de login, il suffit de positionner l'option **-l** lors de son l'invocation:
Ligne 52: Ligne 81:
  
 # Invoque un nouveau shell avec l'option -l (login_shell) # 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 -l -i -c 'echo $0; echo PID=$$; shopt login_shell; pstree -p -s -h $$'
 /bin/bash /bin/bash
sysadmin/linux/shell.1642179475.txt.gz · Dernière modification : 2022/01/14 16:57 de yoann