【发布时间】:2018-05-14 19:06:35
【问题描述】:
我有一个简单的 bash 文件,如下所示
#!/bin/bash
net=$(curl -s -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d '{"network": {"name": "net1"}}' http://10.1.10.146:18090/network/v2.0/networks 2>&1 | awk '/id/{print $1}' | jq -r .network.id)
echo $net
运行这个文件给我一个如下错误
parse error: Invalid numeric literal at line 2, column 0
尝试根据这些链接进行更改 https://unix.stackexchange.com/questions/354943/setting-jq-output-to-a-bash-variable
但没有任何帮助,无法弄清楚我哪里出错了。让我知道错误的原因和可能的更改。
命令的 curl 输出
curl -s -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d '{"network": {"name": "net1"}}' http://10.1.10.146:18090/network/v2.0/networks
输出:
{"network":{"status":"ACTIVE","router:external":false,"availability_zone_hints":[],"availability_zones":[],"description":"","subnets":[],"shared":false,"tenant_id":"d0e75710820c401db3291ac6278f326f","created_at":"2018-05-15T07:37:42Z","tags":[],"ipv6_address_scope":null,"mtu":1450,"updated_at":"2018-05-15T07:37:42Z","admin_state_up":true,"revision_number":2,"ipv4_address_scope":null,"is_default":false,"port_security_enabled":true,"project_id":"d0e75710820c401db3291ac6278f326f","id":"1548df56-a35b-4232-9550-54a3c2266d60","name":"net1"}}
这个想法是只从输出中获取 id 并存储到一个 bash 变量中,我使用下面的命令来获取 id
curl -s -H "Content-Type: application/json" -H "X-Auth-Token: $token" -d '{"network": {"name": "net1"}}' http://10.1.10.146:18090/network/v2.0/networks 2>&1 | awk '/id/{print $1}' | jq -r .network.id
输出:
be831582-90c1-499c-875f-9c0b0d1969a6
我也尝试删除 awk 并解析 curl json 响应,出现同样的错误。
提前致谢。
【问题讨论】:
-
显示
curl输出。 -
编辑了问题,现在可以在问题中查看curl的输出了
-
根本不要使用
awk。让jq为您解析curl检索到的所有 JSON。 -
另请注意
curl输出包含 DOS 行结尾。jq可能对此没有任何问题,但将输出传送到其他 Linux 实用程序会产生令人惊讶的结果。 -
@vidyadharreddy,没有只是 curl 输出。我们需要在 awk 和 jq 之前查看原始 JSON。