Bash 函数、返回值和错误处理

Bash 函数、返回值和错误处理

我正在尝试理解 Bash,我想我已经取得了很大进展。我真正不明白的是错误处理...

我有以下脚本:

set -e
set -u

DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP")
if [[ $? != 0 ]]; then
  exit 1
fi

即使 downloadApplication 函数失败(我现在预期的结果),脚本也不会失败。我真的不知道在将输出捕获到变量中时如何检查这一点。如果我不将其放回变量中,它会按预期工作并失败:

downloadApplication "$WEB_GROUP"
if [[ $? != 0 ]]; then
  exit 1
fi

我有什么选择?谢谢。

答案1

这样的事情怎么样?

DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP" || echo "SomeErrorString")
if [ $DOWNLOADED_ARTIFACT == "SomeErrorString" ]; then
  exit 1
fi

这意味着“如果downloadApplication不成功,则回显SomeErrorString”(因此您的DOWNLOADED_ARTIFACT将被设置为SomeErrorString。然后您可以与该值进行比较。

答案2

该命令DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP")总是会成功,因为 重要的$?是对变量的赋值,无论是赋值0还是1赋值给,都(几乎)保证成功DOWNLOADED_ARTIFACT

答案3

您的错误处理对我来说很好。事实上,set -e由于未检查结果,脚本在执行和分配行退出。您确定downloadApplication以正确的退出代码退出吗?尝试downloadApplication "$WEB_GROUP"; echo $?直接在命令行上执行。

顺便说一下,您可以检查返回代码并在单个语句中捕获输出:

if ! DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP"); then
    echo "Download failed"
    exit 1
fi

do_something $DOWNLOADED_ARTIFACT

相关内容