De hecho, has encontrado el término correcto¹. Hay una variable de entorno SHLVLque todos los shells interactivos principales (bash, tcsh, zsh) se incrementan en 1 cuando comienzan. Entonces, si comienzas un shell dentro de un shell, SHLVLaumenta en 1
Sin embargo, esto no responde directamente a su preocupación, ya que SHLVLtransfiere cosas como emuladores de terminal. Por ejemplo, en mi configuración típica, $SHLVLes 2 en un xterm, porque el nivel 1 corresponde al shell que ejecuta mi sesión X ( ~/.xinitrco ~/.xsession).
Lo que hago es mostrar $SHLVLen mi indicador, pero solo si el proceso padre del shell es otro shell (con heurística como "si su nombre termina en shmás puntuación y dígitos opcionales, es un shell"). De esa manera, tengo una indicación visual obvia en el caso poco común de un shell que se ejecuta bajo otro shell.
Quizás prefiera detectar shells que se ejecutan directamente bajo un emulador de terminal. Usted puede hacer esto con bastante precisión: estos son los depósitos cuyo proceso padre tiene un terminal de control diferente, por lo que ps -o tty= -p$$y ps -o tty= -p$PPIDproducir resultados distintos. Puede restablecer manualmente SHLVLa 1 en estos shells, o establecer el suyo propio TERMSHLVLen 1 en estos shells (e incrementado de lo contrario).
¹
Aunque uno no lo pensaría mirando las páginas del manual: ninguno de los tres shells que lo soportan incluye la palabra "nivel" en su documentación de SHLVL.