Wie kann ich feststellen, wie viele Muscheln ich tief sein könnte?

7

Ich frage mich, ob ich die Shell rekursiv aufgerufen habe. Gibt es eine einfache Möglichkeit, dies herauszufinden? Ist eine Lösung spezifisch für die Shell? Ich benutze Bash.

cgp
quelle

Antworten:

19
echo $SHLVL

Aus der Bash-Manpage:

SHLVL Wird bei jedem Start einer Bash-Instanz um eins erhöht.

Brian-Brasilien
quelle
Ah, da ist es!
CGP
2
Ich denke, es wäre Zeitverschwendung, die übergeordnete Prozess-ID rekursiv zu überprüfen, oder?
Sangretu
1
Das Überprüfen des übergeordneten Prozesses hat den Vorteil, dass er für jede Shell funktioniert.
Brian-Brasilien
6

Eine Möglichkeit ist die Verwendung von pstree:

$ pstree -h
[...]
├─sshd─┬─sshd───sshd───bash───bash───bash───bash───bash───pstree
      └─sshd───sshd───bash───bash───bash───bash
[...]
rkthkr
quelle
2
echo $SHLVL

Dies fängt an, wenn Sie etwas tun wie:

[sharpestmarble@sandbox ~]$ bash 

Obwohl das so etwas nicht fängt, wenn Sie SSH in localhost.

[sharpestmarble@sandbox ~]$ ssh localhost
Kevin M.
quelle
1

Auch nützlich: $BASH_SUBSHELL

$ echo $SHLVL
1
$ (echo $SHLVL)
1
$ echo $BASH_SUBSHELL
0
$ (echo $BASH_SUBSHELL)
1
$ ( (echo $BASH_SUBSHELL) )
2
Bis auf weiteres angehalten.
quelle