Tester l'héritage des variables et des alias dans un shell enfant
Dans cette étape, vous allez explorer le comportement des variables et des alias lorsque vous lancez un nouveau shell à partir de votre shell actuel. Ce nouveau shell est appelé "shell enfant", et le shell d'origine est le "shell parent". Ce concept est crucial pour comprendre comment les environnements shell sont structurés et comment les scripts s'exécutent. Nous allons tester si les variables flower et nut de l'étape précédente sont transmises, ou "héritées", par un shell enfant.
Tout d'abord, identifions l'identifiant de processus (PID) de notre shell parent actuel. Chaque processus sous Linux possède un PID unique. Vous pouvez l'afficher avec la commande echo $$.
echo $$
Votre sortie sera un nombre, qui est le PID de votre shell actuel. Par exemple :
123
Maintenant, lancez un shell enfant en tapant simplement zsh et en appuyant sur Entrée. Cela crée un nouveau processus shell à l'intérieur de votre processus actuel.
zsh
Vous êtes maintenant dans une nouvelle session shell. Pour le confirmer, nous pouvons utiliser la commande ps -f, qui affiche des informations détaillées sur les processus, y compris l'identifiant du processus parent (PPID).
ps -f
Regardez la sortie. Vous verrez deux processus zsh. Le PID du nouveau processus zsh devrait avoir un PPID qui correspond au PID du shell parent que vous avez noté précédemment.
UID PID PPID C STIME TTY TIME CMD
labex 123 1 0 10:00 pts/0 00:00:00 zsh
labex 456 123 0 10:01 pts/0 00:00:00 zsh
labex 457 456 0 10:01 pts/0 00:00:00 ps -f
Dans cet exemple, le nouveau shell (PID 456) est un enfant du shell d'origine (PPID 123).
Maintenant, testons les variables. Dans ce shell enfant, essayez d'afficher la valeur de la variable locale flower.
echo $flower
La commande ne produit aucune sortie. C'est parce que les variables locales sont confinées au shell dans lequel elles ont été créées et ne sont pas héritées par les shells enfants.
Ensuite, vérifiez la variable d'environnement nut.
echo $nut
Cette fois, le shell affiche la valeur de la variable :
almond
Cela démontre que les variables d'environnement, contrairement aux variables locales, sont héritées par les shells enfants.
Maintenant, retournons au shell parent en utilisant la commande exit.
exit
Vous êtes de retour dans votre shell d'origine. Effectuons un test similaire avec un alias. Un alias est un raccourci pour une commande. Créez un alias nommé ldetc qui exécute ls -ld /etc.
alias ldetc='ls -ld /etc'
Vérifiez que l'alias a été créé en tapant alias.
alias ldetc
Vous devriez voir la définition de votre alias :
ldetc='ls -ld /etc'
Maintenant, testez l'alias en l'exécutant.
ldetc
La commande exécutera ls -ld /etc et vous montrera les détails du répertoire /etc.
drwxr-xr-x 1 root root 4096 Oct 10 10:00 /etc
Maintenant, ouvrez un autre shell enfant pour voir si l'alias est hérité.
zsh
À l'intérieur du nouveau shell enfant, essayez d'utiliser l'alias ldetc.
ldetc
Vous recevrez un message d'erreur, car les alias, tout comme les variables locales, ne sont pas hérités par les shells enfants.
zsh: command not found: ldetc
Retournez au shell parent.
exit
Enfin, faisons un peu de nettoyage en supprimant l'alias du shell parent à l'aide de la commande unalias.
unalias ldetc
Vérifiez sa suppression en essayant de le lister à nouveau.
alias ldetc
Rien n'est renvoyé.
Cet exercice vous a montré un principe clé du comportement du shell : les variables d'environnement sont héritées par les processus enfants, mais pas les variables locales ni les alias.