Anda sebenarnya telah menemukan istilah yang benar¹. Ada variabel lingkungan SHLVL
yang semua shells interaktif utama (bash, tcsh, zsh) bertambah 1 saat mereka mulai. Jadi, jika Anda memulai shell di dalam shell, SHLVL
meningkat 1.
Namun, ini tidak langsung menjawab kekhawatiran Anda, karena SHLVL
membahas hal-hal seperti emulator terminal. Misalnya, dalam konfigurasi tipikal saya, $SHLVL
adalah 2 dalam xterm, karena level 1 sesuai dengan shell yang menjalankan sesi X saya ( ~/.xinitrc
atau ~/.xsession
).
Apa yang saya lakukan adalah untuk menampilkan $SHLVL
prompt saya, tetapi hanya jika proses induk dari shell adalah shell lain (dengan heuristik seperti "jika namanya berakhir dengan sh
tanda baca dan digit opsional, ini adalah shell"). Dengan begitu, saya memiliki indikasi visual yang jelas dalam kasus yang tidak biasa dari shell yang berjalan di bawah shell lain.
Mungkin Anda lebih suka mendeteksi kerang yang berjalan langsung di bawah terminal emulator. Anda dapat melakukan ini cukup akurat: ini adalah kerang yang proses induk memiliki terminal pengontrol yang berbeda, sehingga ps -o tty= -p$$
dan ps -o tty= -p$PPID
menghasilkan output yang berbeda. Anda dapat mengatur ulang secara manual SHLVL
ke 1 di shell ini, atau mengatur Anda sendiri TERMSHLVL
ke 1 di shell ini (dan ditambahkan sebaliknya).
¹
Meskipun orang tidak akan berpikir itu melihat halaman manual: tidak satupun dari tiga shell yang mendukungnya termasuk kata "level" dalam dokumentasi mereka SHLVL
.