0

在 ICINGA API 中传递参数的 curl 命令:

我有一个 curl 命令并将其传递给 Bash 脚本,我需要在此 URL 的 POST 方法中有两个变量,如何将参数传递给 CURL 命令

curl -k -s -u 'root:icinga' -H 'Accept: application/json' \
  -X POST 'https://sample.com:5665/v1/actions/acknowledge-problem?type=Service' \
  -d '{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {\"$1\} && service.name == {\"$2\}"" }''' \
  | python -m json.tool

$1 和 $2 应该分别有主机名和服务名

请帮忙

谢谢阿拉文德

4

1 回答 1

1

如果你'like this'在 bash 中使用单引号 ( ),你会得到一个没有变量扩展的文字字符串。也就是说,比较:

$ echo '$DISPLAY'
$DISPLAY

和:

$ echo "$DISPLAY"
:0

curl这与命令行中的情况完全相同,您可以:

'{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {\"$1\} && service.name == {\"$2\}"" }'''

实际上有许多引用问题,从'''结尾处开始,包括""在 final 之前的}。如果您希望这些变量扩展,您需要将它们移到单引号之外。你可以这样做:

'"host.name == {"'"$1"'"} && ...'

在这种情况下,"$1"是在单引号之外。或者,您可以这样做:

"\"host.name == {\"$1\"} ** ..."

这里我们只是在外面使用了双引号,所以变量扩展正常工作,但我们必须转义"字符串中的每个文字。

使用第一个选项, to 的最后一个参数-d看起来像这样(“某事”,因为我不熟悉 icinga):

'{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {"'"$1"'"} && service.name == {"'"$2"'"}}'

如果$1isfoo$2is bar,这会给你:

{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {"foo"} && service.name == {"bar"}}
于 2017-09-04T23:36:24.650 回答