La variable $ SHLVL est utilisée pour vous dire combien de coquilles sont profondes. Si cela vous rend confus, cela vaut la peine de commencer par le début.
Qu'est-ce qu'une coquille?
Un shell prend des commandes et les donne au système d'exploitation sous-jacent à exécuter. Sur la plupart des systèmes Linux, le programme shell s'appelle BASH (The Bourne Again Shell), mais d’autres sont disponibles, notamment le shell C (tcsh) et le shell KORN (ksh).
Comment accéder au shell Linux
En général, en tant qu'utilisateur, vous interagissez avec le programme shell via un programme d'émulation de terminal tel que XTerm, konsole ou gnome-terminal.
Si vous exécutez un gestionnaire de fenêtres tel que Openbox ou un environnement de bureau tel que GNOME ou KDE, vous trouverez un émulateur de terminal à partir d'un menu ou d'un tiret. Sur de nombreux systèmes, les raccourcis clavier CTRL ALT et T ouvriront également une fenêtre de terminal.
Vous pouvez également basculer vers un autre ATS (téléscripteur) offrant un accès direct à un shell de ligne de commande. Vous pouvez le faire en appuyant sur CTRL ALT et F1 ou CTRL ALT et F2 etc.
Qu'est-ce qu'un niveau shell?
Lorsque vous exécutez une commande dans un shell, elle s'exécute à un niveau appelé shell. Dans un shell, vous pouvez ouvrir un autre shell, ce qui en fait un sous-shell ou le shell qui l'a ouvert.
Par conséquent, le shell parent serait considéré comme le shell de niveau 1 et le shell enfant serait un shell de niveau 2.
Comment afficher le niveau de coque
D'après le titre de l'article, cela ne devrait pas surprendre que vous puissiez déterminer le niveau de shell dans lequel vous travaillez en utilisant la variable $ SHLVL.
Pour voir le niveau de shell que vous exécutez actuellement, tapez ce qui suit:
echo $ SHLVL
Chose intéressante, si vous exécutez la commande ci-dessus dans une fenêtre de terminal, vous serez peut-être surpris de voir que le résultat renvoyé est 2.
Si toutefois vous exécutez la même commande en utilisant le tty, le résultat est 1.
Pourquoi est-ce le cas que vous pourriez demander? L’environnement de bureau que vous utilisez est exécuté sur un shell. Ce shell serait de niveau 1. Toute fenêtre de terminal ouverte à partir de cet environnement de bureau doit être un enfant du shell qui a ouvert l'environnement de bureau. Par conséquent, le niveau du shell ne peut pas démarrer à un nombre autre que 2.
Le terminal n’exécute pas d’environnement de bureau et est donc simplement un shell de niveau 1.
Comment créer des sous-coquilles
La manière la plus simple de tester le concept de coques et de sous-coques est la suivante. Ouvrez une fenêtre de terminal et tapez ce qui suit:
echo $ SHLVL
Comme nous le savons depuis une fenêtre de terminal, le niveau minimum de shell est 2.
Maintenant, dans la fenêtre du terminal, tapez ce qui suit:
sh
La commande sh exécute elle-même un shell interactif, ce qui signifie que vous utilisez un shell dans un shell ou un sous-shell.
Si vous tapez maintenant ceci à nouveau:
echo $ SHLVL
Vous verrez que le niveau du shell est défini sur 3. L'exécution de la commande sh à partir du sous-shell ouvrira un sous-shell du sous-shell. Le niveau du shell sera donc au niveau 4.
Pourquoi le niveau de coque est-il important?
Le niveau du shell est important lorsque vous réfléchissez à la portée des variables dans vos scripts.
Commençons par quelque chose de simple:
chien = maisieecho $ chien Si vous exécutez la commande ci-dessus dans un shell, le mot maisie sera affiché dans la fenêtre du terminal. Ouvrez un nouveau shell en tapant ce qui suit: sh Si vous exécutez cette commande, vous verrez que rien n’est réellement renvoyé: echo $ chien En effet, la variable $ dog est uniquement disponible au niveau 2 du shell. Si vous tapez exit pour quitter le sous-shell et exécutez à nouveau echo $ dog, le mot maisie sera affiché à nouveau. Il convient également de réfléchir au comportement des variables globales dans un shell. Commencez dans une nouvelle fenêtre de terminal et tapez ce qui suit: chien d'exportation = maisieecho $ chien Comme on peut s'y attendre, le mot maisie est affiché. Ouvrez maintenant un sous-shell et tapez à nouveau echo $ dog. Cette fois, vous verrez que le mot maisie est affiché même si vous êtes dans un sous-shell. La raison en est que la commande export a rendu la variable $ dog globale. Changer la variable $ dog dans le sous-shell même si vous utilisez la commande export n'a aucun effet sur ses shells parents. Espérons que cela vous permette de constater que le fait de connaître le niveau de shell dans lequel vous travaillez a une certaine importance lors de l'écriture de scripts. Les exemples que j'ai donnés sont très simplistes, mais il est assez courant qu'un script shell appelle un autre script shell qui à son tour appelle un autre script shell, qui s'exécutent maintenant à des niveaux différents. Connaître le niveau de la coque peut être très important.