【发布时间】:2020-05-05 15:22:51
【问题描述】:
我有一个 curl 命令,如下所示:
curl -Iks https://<domain>/<application>
这可能会返回 200 OK,或者失败并返回不同的状态代码。
这个 curl 是在基于我们反向代理后面的一系列不同应用程序的 for 循环中执行的。我依靠 curl 命令的响应(状态代码)来确定下一步应该做什么。
在输出中,我在 if 语句中的回声似乎与 curl 不同步(或根本不执行)。就好像循环的移动速度比 curl 完成返回响应的速度快——我认为这是不可能的?
可能是在 if 语句中执行了第二个 curl(用于 API 帖子)?我只是不知道为什么?
for 循环类似于:
for indx in "${!apps[@]}"; do
response=$(curl -Iks $url)
if [[ $response == *HTTP/1.1 200*]]; then
#...
echo "$appname active!"
postToAPI
elif [[ $response == *HTTP/1.1 302*]]; then
#...
echo "$appname is being redirected."
postToAPI
else
#...
echo "$appname is down!"
fi
done
我已经验证 $appname、$apps 和 $url 都是同步的,并且没有在它们的数组索引中混淆
有谁知道他们为什么执行不同步?或者有时完全跳过?哪个应用程序有时被遗漏或打印不同步似乎是随机的。
【问题讨论】:
-
在我的 for 循环中,响应并不总是按时返回,但 for 循环仍在执行,因此跳过了我的一些应用程序。这是不可能的
-
@oguzismail 我认为,就像大多数代码一样,它逐行运行并且不会那样做 - 有什么想法为什么会发生这种情况?
-
要想知道我应该首先能够重现问题
-
@oguzismail 这有点棘手 - 除非您在反向代理后面有多个可以 curl 的应用程序?
-
正如@oguzismail 所说,这里的代码确实在继续之前等待
curl响应。response直到curl关闭其标准输出(将其写入输出的文件描述符)才分配。在您的真实代码和环境中必须存在其他未在此处显示的内容,然后才会出现相反的行为。