ฉันกำลังพยายามสั่ง GNU ทำให้ 3.81 ไม่หยุดถ้าคำสั่งล้มเหลว (ดังนั้นฉันจึงนำหน้าคำสั่งด้วย-) แต่ฉันต้องการตรวจสอบสถานะการออกจากคำสั่งถัดไปและพิมพ์ข้อความที่ให้ข้อมูลเพิ่มเติม อย่างไรก็ตาม Makefile ของฉันด้านล่างล้มเหลว:
$ cat Makefile 
all:
    -/bin/false
    ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
$
$ make
/bin/false
make: [all] Error 1 (ignored)
([ $? -eq 0 ] && echo "success!") || echo "failure!"
success!
เหตุใด Makefile ด้านบนจึงแสดงว่า "สำเร็จ!" แทนที่จะเป็น "ความล้มเหลว!" ?
อัปเดต:
การติดตามและขยายคำตอบที่ได้รับการยอมรับด้านล่างเป็นวิธีการเขียน:
failure:                                                                                                                                                                                                                                      
    @-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"                                                                                                                                                                 
success:                                                                                                                                                                                                                                      
    @-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"     
          .SHELLFLAGS = -ecควรใช้ แต่ในกรณีนี้คุณไม่สามารถใช้-คำนำหน้าเพิ่มเติมได้ (สำหรับคำสั่งส่วนตัวของใบเสร็จ) เพราะการทำจะเขียนข้อผิดพลาดนั้นจะถูกละเว้น แต่ก็จะยังคงบล็อกทั้งหมดล้มเหลว ดังนั้น|| :เป็นหนึ่งในวิธีการแก้คำสั่งที่จะไม่สนใจ แต่มันไม่ใช่ข้ามแพลตฟอร์ม (Windows มี|| :หรือไม่|| true)
                
.ONESHELL:คำสั่ง