Có cái gì đó tương tự như pipefail cho nhiều lệnh, như câu lệnh 'thử' nhưng trong bash. Tôi muốn làm một cái gì đó như thế này:
echo "trying stuff"
try {
command1
command2
command3
}
Và tại bất kỳ thời điểm nào, nếu bất kỳ lệnh nào bị lỗi, hãy bỏ qua và lặp lại lỗi của lệnh đó. Tôi không muốn phải làm một cái gì đó như:
command1
if [ $? -ne 0 ]; then
echo "command1 borked it"
fi
command2
if [ $? -ne 0 ]; then
echo "command2 borked it"
fi
Và cứ thế ... hoặc bất cứ thứ gì như:
pipefail -o
command1 "arg1" "arg2" | command2 "arg1" "arg2" | command3
Bởi vì các đối số của mỗi lệnh tôi tin (sửa tôi nếu tôi sai) sẽ can thiệp lẫn nhau. Hai phương pháp này có vẻ dài ngoằn ngoèo và khó chịu đối với tôi vì vậy tôi ở đây kêu gọi một phương pháp hiệu quả hơn.
set -e
là một ý tưởng kinh khủng . Xem các bài tập trong BashFAQ # 105 chỉ thảo luận về một số trường hợp cạnh bất ngờ mà nó đưa ra và / hoặc so sánh cho thấy sự không tương thích giữa các triển khai của các shell khác nhau (và các phiên bản shell ') tại in-ulm.de/~mascheck/various/set -e .
set -euo pipefail
.