小编典典

有效检查多个命令的 Bash 退出状态

all

对于多个命令,是否有类似于 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

因为我相信每个命令的参数(如果我错了,请纠正我)会相互干扰。这两种方法对我来说似乎非常冗长和讨厌,所以我在这里呼吁一种更有效的方法。


阅读 116

收藏
2022-05-10

共1个答案

小编典典

您可以编写一个为您启动和测试命令的函数。假设command1command2是已设置为命令的环境变量。

function mytest {
    "$@"
    local status=$?
    if (( status != 0 )); then
        echo "error with $1" >&2
    fi
    return $status
}

mytest "$command1"
mytest "$command2"
2022-05-10