ฉันพยายามเขียนฟังก์ชั่นเพื่อแทนที่ฟังก์ชั่นการทำงานของexitbuiltin เพื่อป้องกันตัวเองไม่ให้ออกจากเครื่อง
ฉันพยายามใช้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คำตอบ (แม้ว่าการโต้เถียง) จะไม่ใช้กับคำถามนั้น