มีบางสิ่งที่คล้ายกับ pipefail สำหรับหลายคำสั่งเช่นคำสั่ง 'ลอง' แต่อยู่ภายในทุบตี ฉันต้องการทำสิ่งนี้:
echo "trying stuff"
try {
command1
command2
command3
}
และ ณ จุดใด ๆ หากคำสั่งใดล้มเหลวให้เลื่อนออกและสะท้อนข้อผิดพลาดของคำสั่งนั้น ฉันไม่ต้องการที่จะทำสิ่งที่ชอบ:
command1
if [ $? -ne 0 ]; then
echo "command1 borked it"
fi
command2
if [ $? -ne 0 ]; then
echo "command2 borked it"
fi
และอื่น ๆ ... หรืออะไรเช่น:
pipefail -o
command1 "arg1" "arg2" | command2 "arg1" "arg2" | command3
เพราะข้อโต้แย้งของแต่ละคำสั่งที่ฉันเชื่อ (แก้ไขฉันถ้าฉันผิด) จะรบกวนซึ่งกันและกัน วิธีการทั้งสองนี้ดูเหมือนจะยืดเยื้อและน่ารังเกียจอย่างมากสำหรับฉันดังนั้นฉันจึงขอวิธีที่มีประสิทธิภาพมากกว่า
set -e
เป็นความคิดที่น่ากลัว ดูแบบฝึกหัดใน BashFAQ # 105พูดคุยเกี่ยวกับกรณีขอบบางอย่างที่ไม่คาดคิดที่แนะนำและ / หรือการเปรียบเทียบแสดงความไม่ลงรอยกันระหว่างการนำไปใช้งานของเชลล์ (และรุ่นของเชลล์) ที่in-ulm.de/~mascheck/various/set -e
set -euo pipefail
.