for-loop - 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 a in $gethosts; do curl -s -H "Content-Type: application/json" -k -X POST -d '{}' "<FNTURL>" | jq "[.returnData[] | select(.cFqdn == \"$a\") | .cResponsible + \";\" + .cFqdn] | .[]"; done
猜猜我有一些引用问题。
推荐阅读
- java - hql中的案例条件
- sqlite - 使用 expo 导入 SQLite 数据库
- php - 如何使用 FPDF 获取 PDF 的总页数?
- java - 如何在 macos 上清除 swt.Image 的缓存?
- python - 在 python 中,在 for 循环中执行运行时输入,它会打印所有值。为什么?
- python - Django:保存后从序列化程序访问数据
- ssh - 多跳ssh隧道,一个命令行
- sql - 供应数量总和达到需求数量时的SQL?
- html - 运行 csv 输入 API 并连接到可缩放的旭日形 API
- c# - System.Data.OleDb.OleDbException: 'UPDATE 语句中的语法错误。'