首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash - PUT data with curl with variable from file

bash - PUT data with curl with variable from file
EN

Stack Overflow用户
提问于 2016-07-20 16:09:16
回答 2查看 1.4K关注 0票数 4

我有一个这样的bash脚本

代码语言:javascript
复制
#!/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应用程序接口更新一些数据。我有很多fqdns和主机名,所以我写了上面的脚本。问题出在JSON上,因为我得到了如下错误:

代码语言:javascript
复制
{"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}'"}}'时,我得到

代码语言:javascript
复制
{
  "error": {"id":130,"errors":{"interfaces.name":["is invalid"],"name":["is invalid"]},"full_messages":["Name is invalid","Name is invalid"]}
}

那么问题出在哪里呢?你能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2016-07-20 17:20:15

要从从Windows复制的文件中删除不重要的特殊字符(CR-LF结尾),可以使用'tr‘命令

代码语言:javascript
复制
hostname=$(echo $hostname|tr -d '\r')

在上面的例子中。这些特殊字符的存在会破坏bash处理字符的方式。

归功于指出hostname变量中存在特殊字符的threadp

如果您曾经怀疑文件有这样的CR-LF结尾,您可以通过使用grep搜索它们来确认,并将文件视为二进制文件

代码语言:javascript
复制
grep -U $'\015' curl1.txt
票数 1
EN

Stack Overflow用户

发布于 2016-07-20 17:30:51

正如threadp所指出的,您有一个尾随的\r字符。您可以尝试执行此操作以删除它。

代码语言:javascript
复制
${hostname%?}

这种用法只是删除了最后一个字符,在此场景中,它是尾随\r。但是,最好使用

代码语言:javascript
复制
${hostname/$'\r'/}

谢谢123

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38475774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档