Bash: ¿Cuántas sesiones anidadas de profundidad?

9

Digamos que comienzo un bashshell,
... y luego otra bashsesión desde dentro de ese shell,
... y luego otra bashsesión desde dentro de esa sesión,
... y luego otra bashsesión desde dentro de esa sesión,
... (veces N), etc.

Para salir de todas las sesiones N tengo que escribir exitN veces.

¿Cómo puedo saber qué tan profundo estoy anidado dentro de una sesión de bash determinada?

Idealmente, estoy buscando alguna variable de entorno similar a las $STYsesiones de pantalla.

tetris11
fuente

Respuestas:

16

Uso SHLVL. De man bash:

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

Ejemplo:

$ echo $SHLVL
1
$ bash
$ echo $SHLVL
2
$ bash
$ echo $SHLVL
3
heemayl
fuente
Esto es bueno, pero he notado un pequeño problema con mi configuración: - mi .xinitrc inicia un shell como un proceso normal, pero otro uso exec(de modo que cuando este terminal se cierra, la XSession completa termina). $SHLVLproduce dos números diferentes para estos terminales. ¿Existe una variable de entorno que sea más específica de shell?
tetris11
$BASH_SUBSHELLParecía prometedor, pero no cumple.
tetris11
1
@ tetris11 Sí ... así es cómo funciona ... SHLVLcompruebe esta solución si encaja ...
heemayl
1
Ah, por supuesto - que puedo configurar manualmente SHLVL=0en ~/.xinitrc. Brillante, gracias
tetris11