ในความเป็นจริงคุณมีคำที่ถูกต้อง¹ มีตัวแปรสภาพแวดล้อม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
ในเอกสารของพวกเขา