W rzeczywistości trafiłeś na właściwy termin¹. Istnieje zmienna środowiskowa, SHLVLktórej wszystkie główne interaktywne powłoki (bash, tcsh, zsh) zwiększają o 1 podczas uruchamiania. Więc jeśli uruchomisz powłokę wewnątrz skorupy, SHLVLzwiększy się o 1.
Nie odpowiada to jednak bezpośrednio na twoje obawy, ponieważ SHLVLprzenosi takie rzeczy jak emulatory terminali. Na przykład w mojej typowej konfiguracji $SHLVLjest 2 w xterm, ponieważ poziom 1 odpowiada powłoce, która uruchamia moją sesję X ( ~/.xinitrclub ~/.xsession).
To, co robię, to wyświetlenie $SHLVLw wierszu polecenia, ale tylko wtedy, gdy proces macierzysty powłoki jest inną powłoką (z heurystyką typu „jeśli jej nazwa kończy się na shplus interpunkcja i cyfry, to powłoka”). W ten sposób mam wyraźne wskazanie wizualne w rzadkim przypadku pocisku działającego pod inną powłoką.
Być może wolisz wykryć powłoki działające bezpośrednio pod emulatorem terminala. Możesz to zrobić dość dokładnie: są to powłoki, których proces macierzysty ma inny terminal kontrolny, więcps -o tty= -p$$ i ps -o tty= -p$PPIDprodukować innego wyjścia. Możesz ręcznie zresetować SHLVLdo 1 w tych powłokach lub ustawić własny TERMSHLVLna 1 w tych powłokach (w innym przypadku zwiększyć).
¹
Chociaż nie można by pomyśleć, że patrzy się na strony podręcznika: żadna z trzech powłok, które ją obsługują, nie zawiera słowa „poziom” w ich dokumentacji SHLVL.