Keyboard Maestro Bash CURL 脚本在没有变量的情况下工作但没有变量

Keyboard Maestro Bash CURL Script Works Without Variable But Not With One

全部。我试图在这个论坛和其他在线网站上研究这个问题。我很难过。希望有人能帮忙。

我在使用 Keyboard Maestro 发送 JSON 到 Zendesk API 以将用户添加到群组时遇到问题。我在 Bash shell 脚本中通过 CURL 执行此操作。在您认为这是 Zendesk API 问题之前,请耐心等待!我真的认为这是 KM 或我在 KM 中做的一些愚蠢的事情。 (可能是后者!)

像这样的 运行 来自 KM 的 Bash 脚本完美运行:

curl https://yoursite.zendesk.com/api/v2/group_memberships/create_many.json \
-X POST -d '{"group_memberships": [{"user_id": 123, "group_id": 1}, {"user_id": 456, "group_id": 1}, {"user_id": 789, "group_id": 1}]}' \
-H "Content-Type: application/json" -v -u (email address here):(password here)

但是,我想通过 KM 变量 ($KMVAR_CURL_Text).

将 user_id 和 group_id 信息传递给 bash 脚本

$KMVAR_CURL_Text 变量内容与 user_id 和 group_id 信息完全匹配 我有上面的手动脚本。我有 运行 通过 JSON 验证器的可变文本。没关系。我已经手动将可变数据粘贴回 bash 脚本,没问题。

但是,如果我使用变量 $KMVAR_CURL_Text:

'{"group_memberships": [{"user_id": 123, "group_id": 1}, {"user_id": 456, "group_id": 1}, {"user_id": 789, "group_id": 1}]}'

使用 shell 脚本:

curl https://yoursite.zendesk.com/api/v2/group_memberships/create_many.json \
-X POST -d $KMVAR_CURL_Text \
-H "Content-Type: application/json" -v -u (email address here):(password here)

Zendesk 的 API 告诉我:

< HTTP/1.1 400 Bad Request
< Server: nginx
< Date: Mon, 21 Sep 2015 15:09:21 GMT
< Content-Type: application/json; charset=UTF-8
< Content-Length: 111
< Connection: keep-alive
< Status: 400 Bad Request
< X-Zendesk-API-Version: v2
< X-Zendesk-API-Warn: Removed restricted keys ["'{\"group_memberships\":"] from parameters according to whitelist

我很高兴与 Zendesk 一起解决这个问题。但是,由于我可以手动完成这项工作,所以我觉得问题出在我或 KM 身上。任何人都知道我做错了什么?可能与变量相关的转义、非转义或文本编码?

谢谢!

马克 :-)

始终 引用 shell 扩展,除非您有特殊且令人信服的理由不这样做。

-d "$KMVAR_CURL_Text"

否则,该字符串会经历字符串拆分(根据 IFS 的内容拆分为多个单词)和 glob 扩展(将这些单词中的每一个都视为一个 glob 表达式,并可能替换为一个列表文件名)。