我有这样的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)主机名
……….
我必须使用theForeman API更新一些数据.我有很多fqdns和主机名,所以我写了上面的脚本.问题出在JSON上,因为我收到这样的错误:
{"status":400,"error":"There was a problem in the JSON you submitted: 795: unexpected token at '{\"host\":{\"name\": \"ptesrv02-lub\r\"}}'"}
当我将'{“主持人”:{“name”:“${hostname}”}}’改为'{“host”:{“name”:“’${hostname}’”}}’我得到了
{
"error": {"id":130,"errors":{"interfaces.name":["is invalid"],"name":["is invalid"]},"full_messages":["Name is invalid","Name is invalid"]}
}
那问题出在哪里?你能帮帮我吗?
最佳答案 要从Windows复制的文件中删除琐碎的特殊字符(CR-LF结尾),可以使用’tr’命令
hostname=$(echo $hostname|tr -d '\r')
在上面的例子中.这些特殊字符的存在破坏了bash如何处理字符.
致于threadp
,用于指出hostname变量中是否存在特殊字符.
如果您怀疑文件有这样的CR-LF结尾,您可以通过使用grep搜索它们来确认,将文件视为二进制文件
grep -U $'\015' curl1.txt