首页 > 解决方案 > Bash - 用于循环 curl 没有输出

问题描述

所以,我目前正在尝试将来自 Consul 集群的数据与来自 FNT 的数据连接起来。我通过在 Consul API 中卷曲获得所需的数据,并且应根据 FNT 检查返回的服务器名称以获取服务器所有者。

以下是领事卷曲:

gethosts=$(curl -s -H "Authorization: Bearer <TOKEN>" <CONSUL URL> | jq -cr '.[] | select(.NodeMeta.type == "physical") | .ServiceAddress')

以下是 FNT 卷曲:

curl -s -H "Content-Type: application/json" -k -X POST -d '{}' "<FNT URL>" | jq '.returnData[] | select(.cFqdn == "<FQDN>") | .cResponsible + "/" + .cFqdn'

两者都可以自己完美地工作。Consul Curl 从每个物理(硬件)主机获取每个 FQDN,如果我将其中一个 FQDN 粘贴到 FNT curl 中,它会再次获取 FQDN + 该服务器的负责所有者。

现在我想将它们组合在一个循环中,以使 Consul 的每个 FQDN 都与 FNT 进行以下检查:

 for i in $gethosts; do curl -s -H "Content-Type: application/json" -k -X POST -d '{}' "<FNT URL>" | jq '.returnData[] | select(.cFqdn == $i) | .cResponsible + " " + .cFqdn'; done

但它根本不起作用。没有错误或任何我可以使用的东西。根本没有输出。

你们中有人看到我的 for 循环中的错误吗?因为我绝对不能,经过这么多小时的故障排除后,可能已经编码盲了:D

提前致谢!

PS:我也试过

for i in $gethosts; do $(curl -s -H "Content-Type: application/json" -k -X POST -d '{}' "<FNT URL>" | jq '.returnData[] | select(.cFqdn == $i) | .cResponsible + " " + .cFqdn'); done

或者

for i in $gethosts; do curl -s -H "Content-Type: application/json" -k -X POST -d '{}' "<FNT URL>" | jq '.returnData[] | select(.cFqdn == <FQDN>) | .cResponsible + " " + .cFqdn'; done

据我了解,最后一个应该始终具有相同的输出,但与主机在 $gethosts 中的次数一样多。我这样做是为了看看 .cFqdn 中的 $i 是否是问题所在,但似乎不是。

标签: for-loopcurl

解决方案


我修好了它。

for a in $gethosts; do curl -s -H "Content-Type: application/json" -k -X POST -d '{}' "<FNTURL>" | jq "[.returnData[] | select(.cFqdn == \"$a\") | .cResponsible + \";\" + .cFqdn] | .[]"; done

猜猜我有一些引用问题。


推荐阅读