Скрипт Keyboard Maestro Bash CURL работает без переменной, но не с одной

все. Я пытался исследовать этот вопрос на этом форуме и в других местах в Интернете. Я в тупике. Надеясь, что кто-то может помочь.

У меня возникла проблема с использованием Keyboard Maestro для отправки JSON в API Zendesk для добавления пользователей в группы. Я делаю это через CURL в сценарии оболочки Bash. Прежде чем вы решите, что это проблема Zendesk API, потерпите меня! Я действительно думаю, что это КМ или что-то глупое, что я делаю в КМ. (Возможно последнее!)

Сценарий Bash, подобный этому запуску из KM, работает отлично:

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)

Но я хочу передать информацию user_id и group_id сценарию bash через переменную KM ($KMVAR_CURL_Text).

Содержимое переменной $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}]}'

со сценарием оболочки:

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. Кто-нибудь знает, что я делаю неправильно? Может быть, что-то с экранированием, неэкранированием или текстовой кодировкой, связанной с переменной?

Спасибо!

Марк :-)


person Marc    schedule 21.09.2015    source источник
comment
Цитаты, люди, цитаты.   -  person Charles Duffy    schedule 21.09.2015
comment
Кстати, shellcheck.net подловил бы это для вас.   -  person Charles Duffy    schedule 21.09.2015
comment
Вопрос, который я пометил как дубликат, представляет собой немного более интересный случай — кто-то, кто знает, что цитирование важно, но не знает, как сделать это правильно, — но ответы полностью применимы. (Они цитируют статические части своего параметра, но не расширения; у вас нет статических частей этого параметра, поэтому в вашем вопросе это все расширение без кавычек, но это расширение без кавычек виновато в обоих случаи).   -  person Charles Duffy    schedule 21.09.2015


Ответы (1)


Всегда указывайте расширения оболочки, если у вас нет особых и веских причин поступать иначе.

-d "$KMVAR_CURL_Text"

В противном случае строка проходит через разбиение строки (превращается в несколько слов, разделенных на содержимое IFS) и расширение шаблона (каждое из этих слов рассматривается как выражение шаблона и потенциально заменяется списком имен файлов).

person Charles Duffy    schedule 21.09.2015
comment
Вы джентльмен и ученый, Чарльз! Извините, мои предыдущие поиски не выкопали это! - person Marc; 21.09.2015