วิธีการเลิกทำผลของ "set -e" ซึ่งทำให้ bash exit ทันทีหากคำสั่งใดล้มเหลว


205

หลังจากป้อนset -eในเชลล์ทุบตีแบบโต้ตอบแล้วทุบตีจะออกทันทีถ้าคำสั่งใด ๆ ออกโดยไม่มีศูนย์ ฉันจะยกเลิกผลกระทบนี้ได้อย่างไร

คำตอบ:


309

set +eกับ ใช่มันย้อนกลับที่คุณเปิดใช้งานตัวเลือกเปลือกset -และปิดการใช้งานset +พวกเขาด้วย ลูกเกดประวัติศาสตร์


ขอบคุณมากมันเป็นหนึ่งในบรรทัดสุดท้ายของหน้าคู่มือที่เกี่ยวข้อง ( faqs.org/docs/bashman/bashref_56.html ) ซึ่งฉันไม่ได้อ่านจนจบ
Tianyi Cui

คู่มือทุบตีมีขนาดใหญ่มากมันเป็นเรื่องจริง (FYI เนื่องจากคุณดูเหมือนจะใหม่: มันเป็นสิ่งที่ทำเพื่อคลิกเครื่องหมายถูกภายใต้คำตอบที่ดีที่สุดสำหรับคำถามของคุณนี้เรียกว่า "ยอมรับ" มัน)
zwol

12
น่าเศร้าภาษาเชลล์ Unix (ส่วนใหญ่ไม่เฉพาะเจาะจงกับ 'ทุบตี') เป็นหนึ่งในภาษาการเขียนโปรแกรมที่สอดคล้องกันน้อยที่สุดภายในยังคงใช้กันอย่างแพร่หลายในวันนี้ คุณจะต้องเรียนรู้หูดน้อยเหล่านี้ให้มากขึ้น และฉันบอกว่านั่นเป็นข้อผิดพลาดด้านเอกสารนั่น
zwol

10
องุ่นประวัติศาสตร์เป็นลูกเกดนรก!
James

2
ในที่สุดการทุบตีอย่างไม่เป็นธรรมของ Bash: single dash เป็นตัวเลือกบรรทัดคำสั่งเชลล์ POSIX มาตรฐานและดังนั้นจึงเป็นเรื่องธรรมดาที่สุดสำหรับ "ทำบางสิ่ง" +เป็นเหมือน-แต่การข้ามผ่านบางสิ่งหมายถึง "ไม่" เหมือนใน "≠"
Ciro Santilli 郝海东冠状病六四事件法轮功

68

อาจใช้ไม่ได้set +e/ set -eทุกครั้งที่คุณต้องการแทนที่ ฉันพบทางออกที่ง่ายกว่า

แทนที่จะทำแบบนี้:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

คุณสามารถทำได้เช่นนี้:

command_that_might_fail_but_we_want_to_ignore_it || true

หรือถ้าคุณต้องการบันทึกการกดแป้นและไม่ต้องคิดว่าเป็นความลับเล็ก ๆ น้อย ๆ :

command_that_might_fail_but_we_want_to_ignore_it || :

หวังว่านี่จะช่วยได้!


11
สงสัยเกี่ยวกับประวัติของ:และพบคำตอบของฉันที่นี่ในกรณีที่คนอื่นอยากรู้อยากเห็น
3cheesewheel

4
สิ่งนี้ใช้เฉพาะในกรณีที่คุณไม่สนใจรหัสส่งคืนของคำสั่งที่คุณใช้งานอยู่
Isaac

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.