ฉันพยายามเขียนฟังก์ชั่นเพื่อแทนที่ฟังก์ชั่นการทำงานของexit
builtin เพื่อป้องกันตัวเองไม่ให้ออกจากเครื่อง
ฉันพยายามใช้SHLVL
ตัวแปรสภาพแวดล้อม แต่ดูเหมือนจะไม่เปลี่ยนแปลงภายใน subshells:
$ echo $SHLVL
1
$ ( echo $SHLVL )
1
$ bash -c 'echo $SHLVL'
2
ฟังก์ชั่นของฉันเป็นดังนี้:
exit () {
if [[ $SHLVL -eq 1 ]]; then
printf '%s\n' "Nice try!" >&2
else
command exit
fi
}
สิ่งนี้จะไม่อนุญาตให้ฉันใช้exit
ภายใน subshells แม้ว่า:
$ exit
Nice try!
$ (exit)
Nice try!
เป็นวิธีที่ดีในการตรวจสอบว่าฉันอยู่ใน subshell หรือไม่
(...)
ได้รับคุณสมบัติทั้งหมดของกระบวนการพาเรนต์ คำตอบที่ให้ไว้คือโซลูชันที่มีประสิทธิภาพมากขึ้นในการกำหนดระดับเชลล์ของคุณ
BASH_SUBSHELL
คำตอบ (แม้ว่าการโต้เถียง) จะไม่ใช้กับคำถามนั้น