【问题标题】:bash script error while sending data to api向api发送数据时出现bash脚本错误
【发布时间】:2020-08-31 07:39:15
【问题描述】:

下面是我的 bash 脚本:

#!/bin/bash
message=$1
hostname=$2
appname=$3
severity=$4

data='{"action":"EventsRouter","method":"add_event","data":[{"summary":"'$message'","device":"'$hostname'","message":"message","component":"'$appname'","severity":"'$severity'","evclasskey":"nxlog","evclass":"nxlog","monitor":"localhost"}],"type":"rpc","tid":2}'

echo "Total number of args : $#"

echo "message = $message"
echo "hostname = $hostname"
echo "appname = $appname"
echo "data = $data"

curl -u "Eve:Welcome666" -k "https://myurlcom/zport/dmd/evconsole_router" -d $data -H "Content-Type:application/json"

我的错误是:

Total number of args : 4
message = mes
hostname = hos
appname = sev
data = {"action":"EventsRouter","method":"add_event","data":[{"summary":"mes","device":"hos","message":"message","component":"sev","severity":"ap","evclasskey":"nxlog","evclass":"nxlog","monitor":"localhost"}],"type":"rpc","tid":2}

{"uuid": "9b66e70d-44fc-463d-a347-786fe5502c13", "action": "EventsRouter", "result": {"msg": "Failed to create event: NoRouteException: Reply code: 312, Reply text: NO_ROUTE, Exchange:zenoss.zenevents.raw, Routing key: zenoss.zeneventnxlog", "type":"exception", "success": false}, "tid": 2, "type": "rpc", "method": "add_event"}

但是,当我直接卷曲数据时,它正在工作。

curl -u Eve:Welcome666 -k https://myurl.com/zport/dmd/evconsole_router -d '{"action":"EventsRouter", "method":"add_event","data":[{"summary":"test","device":"test","message":"msg","component":"testhost","severity":"5", "evclasskey":"nxlog", "evclass":"/nxlog/perf","monitor":"localhost"}],"type":"rpc","tid":2}' -H "Content-Type:application/json"

{"uuid": "1654584c-5f86-489e-a5e7-35d45e462066", "action": "EventsRouter", "result": {"msg": "Created event", "success": true},"tid": 2, "type": "rpc", "method": "add_event"}

【问题讨论】:

  • "$data"替换$data?
  • 试过了,不行! @赛勒斯
  • 标准调试建议适用:试试set -x,看看你的命令扩展成什么——当你说“我的错误是”时,错误是什么?您没有显示来自端点的响应吗?比如,它有效吗?

标签: linux bash api curl sh


【解决方案1】:

我认为您在脚本中缺少 $data 周围的引号,正确的形式是:

curl -u "Eve:Welcome666" -k "https://myurlcom/zport/dmd/evconsole_router" -d "'$data'" -H "Content-Type:application/json"

【讨论】:

  • 这将使名称 $data 作为字符串,打印 $data 作为值,而不是 bash 中的内容。不是我期望的结果,json 不会被接受。
  • 你可以混合使用双引号和单引号:stackoverflow.com/questions/6697753/… aa='"as":"bb"' ;回声 $aa ;回声“'$aa'”
  • 我确实尝试过“'$data'”,它认为整个字符串都是 $data 而不是里面的那个
  • "'$data'" 将包含文字单引号,您可能不想要。
  • @SPishere "'$data'" 不会 扩展为字面意义上的$data,而是扩展为'<contents of $data>'。如果它为您扩展为 $data,则您没有显示一些外部单引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 2021-03-02
  • 2016-05-14
  • 2019-09-09
相关资源
最近更新 更多