我试图把我的头围绕着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,(几乎)保证成功,或者将0或1赋值给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