Bash函数,返回值和error handling

我试图把我的头围绕着Bash,并且认为我已经变得相当远了。 我真的不明白的是error handling…

我有以下脚本:

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

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

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

我有什么select? 谢谢。

这样的事情呢?

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

这意味着“如果downloadApplication不成功,然后echo SomeErrorString ”(所以你的DOWNLOADED_ARTIFACT将被设置为SomeErrorString 。那么你可以比较这个值。

命令DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP")总是会被DOWNLOADED_ARTIFACT=$(downloadApplication "$WEB_GROUP") ,因为重要的是$? 是赋值给variables,(几乎)保证成功,或者将01赋值给DOWNLOADED_ARTIFACT

你的error handling适合我。 事实上,通过set -e脚本会退出执行和分配行,因为结果没有被检查。 你确定downloadApplication用正确的退出码退出吗? 尝试执行downloadApplication "$WEB_GROUP"; echo $? downloadApplication "$WEB_GROUP"; echo $? 直接在命令行上。

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

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