De fato, você encontrou o termo correto¹. Há uma variável de ambiente SHLVL
que todas as principais shells interativas (bash, tcsh, zsh) incrementam em 1 quando são iniciadas. Portanto, se você iniciar um shell dentro de um shell, SHLVL
aumenta em 1.
Isso não responde diretamente à sua preocupação, no entanto, porque SHLVL
carrega coisas como emuladores de terminal. Por exemplo, na minha configuração típica, $SHLVL
é 2 em um xterm, porque o nível 1 corresponde ao shell que executa minha sessão X ( ~/.xinitrc
ou ~/.xsession
).
O que faço é exibir $SHLVL
no meu prompt, mas apenas se o processo pai do shell for outro shell (com heurísticas como "se o nome terminar em sh
mais pontuação e dígitos opcionais, é um shell"). Dessa forma, tenho uma indicação visual óbvia no caso incomum de um shell executando sob outro shell.
Talvez você prefira detectar shells que estão sendo executados diretamente sob um emulador de terminal. Você pode fazer isso com bastante precisão: estas são as conchas cujo processo pai tem um terminal de controle diferente, de modo que ps -o tty= -p$$
e ps -o tty= -p$PPID
produzir uma saída diferente. Você pode redefinir manualmente SHLVL
para 1 nessas conchas ou definir seu próprio TERMSHLVL
como 1 nessas conchas (e incrementado de outra forma).
¹
Embora ninguém ache que está olhando as páginas do manual: nenhum dos três shells que o suportam inclui a palavra “level” em sua documentação SHLVL
.