Bash:有多少嵌套会话深?


9

假设我启动了一个bash外壳,
然后bash是该外壳中的
另一个bash会话,然后是该会话中的
另一个bash会话,然后是该会话中的另一个会话,
(N次)等

要退出所有N个会话,我必须键入exitN次。

我如何找出在任何给定的bash会话中嵌套的深度?

理想情况下,我正在寻找一些类似于$STY屏幕会话的环境变量。

Answers:


16

使用SHLVL。来自man bash

SHLVL  Incremented by one each time an instance of bash is started.

范例:

$ echo $SHLVL
1
$ bash
$ echo $SHLVL
2
$ bash
$ echo $SHLVL
3

很好,但是我注意到我的设置有一个小问题:-我的.xinitrc作为一个常规进程启动一个shell,但是使用另一个启动exec(这样,当此终端关闭时,整个XSession结束)。$SHLVL为这些终端产生两个不同的数字。是否有一个更特定于Shell的环境变量?
tetris11

$BASH_SUBSHELL看起来很有前途,但没有实现。
tetris11 2015年

1
@ tetris11Yeah .. 那是如何SHLVL工作的..请检查解决方案是否适合..
heemayl 2015年

1
啊,当然-我可以手动设置SHLVL=0~/.xinitrc。太好了,谢谢
tetris11
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.