对于多个命令,是否有类似于 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
因为我相信每个命令的参数(如果我错了,请纠正我)会相互干扰。这两种方法对我来说似乎非常冗长和讨厌,所以我在这里呼吁一种更有效的方法。
您可以编写一个为您启动和测试命令的函数。假设command1和command2是已设置为命令的环境变量。
command1
command2
function mytest { "$@" local status=$? if (( status != 0 )); then echo "error with $1" >&2 fi return $status } mytest "$command1" mytest "$command2"