Есть ли что-то похожее на pipefail для нескольких команд, например оператор try, но внутри bash. Я хотел бы сделать что-то вроде этого:
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 -е .
set -euo pipefail
.