Bash: Quantas sessões aninhadas têm profundidade?

9

Digamos que eu inicie um bashshell,
... e depois outra bashsessão dentro desse shell,
... e então outra bashsessão dentro dessa sessão,
... e depois outra bashsessão dentro dessa sessão,
... (vezes N) etc

Para sair de todas as N sessões, tenho que digitar exitN vezes.

Como descubro até que ponto estou aninhado em qualquer sessão do bash?

Idealmente, estou procurando alguma variável de ambiente semelhante à $STYdas sessões de tela.

tetris11
fonte

Respostas:

16

Use SHLVL. De man bash:

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

Exemplo:

$ echo $SHLVL
1
$ bash
$ echo $SHLVL
2
$ bash
$ echo $SHLVL
3
heemail
fonte
Isso é bom, mas notei um pequeno problema com minha configuração: - meu .xinitrc inicia um shell como um processo regular, mas outro usando exec(para que, quando este terminal for fechado, o XSession inteiro termine). $SHLVLproduz dois números diferentes para esses terminais. Existe uma variável de ambiente mais específica do shell?
precisa saber é o seguinte
$BASH_SUBSHELLparecia promissor, mas não entrega.
Tetris11
1
@ tetris11Yeah..thats como SHLVLworks..check esta solução, se ele se encaixa ..
heemayl
1
Ah, é claro - eu posso definir manualmente SHLVL=0em ~/.xinitrc. Brilliant, graças
tetris11