【发布时间】:2014-03-20 16:28:59
【问题描述】:
我有一个在 CI 服务器上执行的 shell 脚本,该 shell 脚本与 Curl 的 . 现在,如果 curl 不成功,我希望脚本失败,我读到“$?”将给出执行语句的状态,我如何使用它来实现我想要的?
function do_curl
{
echo "==== Posting $file_name to DHIS ===="
curl -H "Content-Type: application/json" -u $authorization -d @$file_name $url -X POST || exit
echo ""
}
这个函数被重复调用,我希望它在第一次失败时退出,现在,它不会退出,而是执行它调用的次数,即使它第一次失败。
【问题讨论】:
-
不够好。将
|| exit放在函数内的调用上将退出shell,而不仅仅是函数,所以同样,您仍然在某个地方有一个子shell,大概是函数本身的外部。 -
顺便说一下,
function foo {不是定义函数的 POSIX 兼容方式。如果您希望您的代码与其他 shell 兼容,请使用foo() {,不带function关键字。 -
另外,你需要更多的引号来避免字符串分割。
-u "$authorization"、-d "@$file_name"、"$url"等,否则当您的文件名、授权内容等包含空格、全局字符等时,您就会遇到错误。 -
顺便说一句——你确定 curl 实际上是以非零值退出的吗?如果遇到 500 错误但仍以状态 0 退出,则可能需要使用
curl --fail。 -
在我更新的答案中,您可能会在这里找到您要查找的内容:stackoverflow.com/questions/9893667/…