70 votes

Comment savoir si j'utilise un shell imbriqué?

Lors de l'utilisation d'un *nix shell (généralement bash), j'ai souvent frayer un sous-shell avec qui je puisse prendre soin d'un petit groupe (habituellement dans un autre répertoire), puis en sortir pour reprendre la session de la mère de shell.

De temps en temps, je vais perdre la trace de savoir si je suis à court d'un imbriquée shell, ou dans mon top-niveau de la coque, et je vais accidentellement frayer une autre sous-shell ou de sortie de haut-niveau de la coque par erreur.

Est-il un moyen simple de déterminer si je suis en cours d'exécution dans un sous shell? Ou vais-je au sujet de mon problème (en créant des sous-shells) dans un très mauvais chemin?

90voto

John Kugelman Points 108754

La variable $SHLVL suit votre niveau d'imbrication de shell:

 $ echo $SHLVL
1
$ bash
$ echo $SHLVL
2
$ exit
$ echo $SHLVL
1
 

Au lieu de générer des sous-coques, vous pouvez pousser et extraire des répertoires de la pile et rester dans le même shell:

 [root@localhost /old/dir]# pushd /new/dir
/new/dir /old/dir
[root@localhost /new/dir]# popd
/old/dir
[root@localhost /old/dir]#
 

24voto

Dennis Williamson Points 105818

Voici une version simplifiée d'une partie de mon invite:

 PS1='$(((SHLVL>1))&&echo $SHLVL)\$ '
 

Si je ne suis pas dans un sous-shell, cela n'ajoute rien, mais il indique la profondeur si je suis dans un niveau de sous-shell.

13voto

melchi Points 31

pstree -s $$ est très utile pour voir votre profondeur. - Je n'ai pas pu commenter la réponse de Glenn Jackman (manque de réputation). - besoin d'ajouter -s et ptree => pstree.

0voto

glenn jackman Points 69748

ptree $$ vous montrera également combien de niveaux vous êtes en profondeur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X