【发布时间】:2011-07-08 21:53:24
【问题描述】:
对于多个命令,是否存在类似于 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
因为我相信每个命令的参数(如果我错了,请纠正我)会相互干扰。这两种方法对我来说似乎非常冗长和讨厌,所以我在这里呼吁一种更有效的方法。
【问题讨论】:
-
看看the unofficial bash strict mode:
set -euo pipefail。 -
@PabloBianchi,
set -e是一个可怕的想法。请参阅 the exercises in BashFAQ #105 讨论它引入的一些意外边缘情况,和/或在 in-ulm.de/~mascheck/various/set-e 上显示不同 shell(和 shell 版本)实现之间不兼容的比较。