การดำเนินการ(exit 1);เป็นวิธีที่ง่ายที่สุดในการเรียกERRกับดัก มันจะทริกเกอร์ทางออกทันทีหากset -eมีผล (การทริกเกอร์เงื่อนไขข้อผิดพลาดจำเป็นต้องมีคำสั่งล้มเหลวexitด้วยค่าความล้มเหลวใน subshell ทำให้ subshell ล้มเหลว)
exit 1; จะไม่ทำสิ่งเหล่านั้น
ดังนั้น{(exit 1); exit 1;}สามารถใช้เพื่อสร้างERRกับดักก่อนซึ่งอาจทำสิ่งที่มีประโยชน์สำหรับวัตถุประสงค์ในการดีบั๊กและยุติสคริปต์ด้วยตัวบ่งชี้ข้อผิดพลาด
แต่นั่นไม่ใช่สิ่งที่เกิดขึ้นในautoconfไฟล์ autoconfสคริปต์พึ่งพากับEXITดักเพื่อทำความสะอาดไฟล์ชั่วคราวที่สร้างขึ้นระหว่างการรัน เชลล์ส่วนใหญ่รวมถึงbashจะตั้งค่าสถานะจากค่าที่ให้ไว้ในexitคำสั่งก่อนที่จะเรียกEXITกับดัก ซึ่งอาจทำให้EXITแทร็บตรวจพบว่ามีการเรียกใช้จากข้อผิดพลาดหรือจากการเลิกจ้างตามปกติและยังช่วยให้มั่นใจได้ว่าสถานะทางออกถูกตั้งค่าอย่างถูกต้องในตอนท้ายของการดำเนินการกับดัก
อย่างไรก็ตามดูเหมือนว่าบางเชลล์ไม่ได้ทำงานร่วมกัน นี่คือคำพูดจากautoconfคู่มือ :
เชลล์สคริปต์บางตัวเช่นที่สร้างโดยautoconfใช้กับดักเพื่อล้างข้อมูลก่อนออก หากคำสั่งเชลล์สุดท้ายออกด้วยสถานะที่ไม่ใช่ศูนย์กับดักยังออกด้วยสถานะที่ไม่ใช่ศูนย์เพื่อให้ผู้เรียกใช้สามารถบอกได้ว่าเกิดข้อผิดพลาดขึ้น
น่าเสียดายที่ในบางเชลล์เช่น Solaris /bin/shกับดักออกจะไม่สนใจอาร์กิวเมนต์ของคำสั่ง exit ในเชลล์เหล่านี้กับดักไม่สามารถระบุได้ว่ามันถูกเรียกใช้โดย exit ธรรมดาหรือโดย exit 1 แทนการเรียก exit โดยตรงให้ใช้AC_MSG_ERRORแมโครที่มีวิธีแก้ปัญหาสำหรับปัญหานี้
วิธีแก้ปัญหาคือเพื่อให้แน่ใจว่า$?มีสถานะการออกก่อนที่exitคำสั่งจะถูกดำเนินการเพื่อที่จะมีค่านั้นอย่างแน่นอนเมื่อเรียกใช้EXITกับดัก และแน่นอนว่ามันเป็นAC_MSG_ERRORมาโครที่แทรกโค้ดแปลก ๆ นั้นพร้อมกับเครื่องหมายวงเล็บซ้ำซ้อน
falseแทน(exit 1)?