【发布时间】:2016-11-23 08:47:35
【问题描述】:
我有一个这样的 bash 脚本
#!/bin/bash
while read fqdn hostname; do
curl -H "Content-Type:application/json" -XPUT "https://server/api/hosts/${fqdn}" -d '{"host":{"name": "'${hostname}'"}}' --cacert bundle.pem --cert pnet-pem.cer --key privkey.pem
done <curl1.txt
文件 curl1.txt 包含的
fqdn (tab)主机名
.......
我必须使用 Foreman API 更新一些数据。我有很多 fqdns 和主机名,所以我编写了上面的脚本。问题出在 JSON 上,因为我收到这样的错误:
{"status":400,"error":"There was a problem in the JSON you submitted: 795: unexpected token at '{\"host\":{\"name\": \"ptesrv02-lub\r\"}}'"}
当我输入'{"host":{"name": "${hostname}"}}' 而不是'{"host":{"name": "'${hostname}'"}}' 时,我得到了
{
"error": {"id":130,"errors":{"interfaces.name":["is invalid"],"name":["is invalid"]},"full_messages":["Name is invalid","Name is invalid"]}
}
那么问题出在哪里?你能帮帮我吗?
【问题讨论】:
-
您的
${hostname}值中有一个尾随\r字符:ptesrv02-lub\r。这很可能是问题所在。 -
好的,那么 \r 是什么意思?在文本文件中我没有这样的标志,该文件是由 ruby 脚本生成的。
-
@Inian,因为您是第一个提出可行解决方案的人,请将您的评论作为答案,以便 OP 接受。
-
@salih 您还应该提供您的答案,因为它是另一种有用的方法。
-
@alaSmith:您可以点击下方答案左侧的小勾号接受帖子,从而将帖子标记为已解决。
标签: json bash curl theforeman