ในความเป็นจริงคุณมีคำที่ถูกต้อง¹ มีตัวแปรสภาพแวดล้อมSHLVLที่เชลล์เชิงโต้ตอบที่สำคัญทั้งหมด (bash, tcsh, zsh) เพิ่มขึ้น 1 เมื่อเริ่มต้น ดังนั้นถ้าคุณเริ่มเชลล์ภายในเชลล์ให้SHLVLเพิ่มขึ้น 1
อย่างไรก็ตามสิ่งนี้ไม่ได้ตอบข้อกังวลของคุณโดยตรงเนื่องจากSHLVLมีหลายสิ่งเช่นเทอร์มินัลอีมูเลเตอร์ ตัวอย่างเช่นในการกำหนดค่าทั่วไปของฉัน$SHLVLคือ 2 ใน xterm เนื่องจากระดับ 1 สอดคล้องกับเชลล์ที่รันเซสชัน X ของฉัน ( ~/.xinitrcหรือ~/.xsession)
สิ่งที่ฉันทำคือการแสดง$SHLVLในพรอมต์ของฉัน แต่ถ้ากระบวนการหลักของเปลือกหอยเป็นเปลือกอื่น (ด้วยการวิเคราะห์พฤติกรรมเช่น "ถ้าชื่อของมันจบลงด้วยshเครื่องหมายวรรคตอนและตัวเลขตัวเลือกมันเป็นเปลือก") ด้วยวิธีนี้ฉันมีตัวบ่งชี้ที่เห็นได้ชัดในกรณีที่ไม่ธรรมดาของเชลล์ที่ทำงานภายใต้เชลล์อื่น
บางทีคุณอาจต้องการตรวจจับเชลล์ที่รันโดยตรงภายใต้เทอร์มินัลอีมูเลเตอร์ คุณสามารถทำสิ่งนี้ได้อย่างถูกต้อง: เชลล์เหล่านี้มีกระบวนการพาเรนต์ที่มีเทอร์มินัลการควบคุมที่แตกต่างกันดังนั้นps -o tty= -p$$และps -o tty= -p$PPIDผลิตเอาต์พุตที่แตกต่างกัน คุณอาจรีเซ็ตSHLVLเป็น 1 ในเชลล์เหล่านี้ด้วยตนเองหรือตั้งค่าของคุณเองTERMSHLVLเป็น 1 ในเชลล์เหล่านี้ (และเพิ่มเป็นอย่างอื่น)
¹
ถึงแม้คนหนึ่งจะไม่คิดว่ามันดูที่หน้าคู่มือ: ไม่มีในสามของเปลือกหอยที่สนับสนุนมันรวมคำว่า“ระดับ” SHLVLในเอกสารของพวกเขา