Czy istnieje coś podobnego do pipefail dla wielu poleceń, na przykład instrukcja „try”, ale w bash. Chciałbym zrobić coś takiego:
echo "trying stuff"
try {
command1
command2
command3
}
I w dowolnym momencie, jeśli jakieś polecenie zawiedzie, porzuć i powtórz błąd tego polecenia. Nie chcę robić czegoś takiego:
command1
if [ $? -ne 0 ]; then
echo "command1 borked it"
fi
command2
if [ $? -ne 0 ]; then
echo "command2 borked it"
fi
I tak dalej ... lub coś w stylu:
pipefail -o
command1 "arg1" "arg2" | command2 "arg1" "arg2" | command3
Ponieważ uważam, że argumenty każdego polecenia (popraw mnie, jeśli się mylę) będą się wzajemnie zakłócały. Te dwie metody wydają mi się strasznie długie i nieprzyjemne, dlatego apeluję o bardziej wydajną metodę.
set -e
to okropny pomysł. Zobacz ćwiczenia w BashFAQ # 105 omawiające tylko kilka nieoczekiwanych przypadków brzegowych, które wprowadza, i / lub porównanie pokazujące niezgodności między implementacjami różnych powłok (i wersji powłok) na stronie inulm.de/~mascheck/various/set -e .
set -euo pipefail
.