Невозможно заменить json из файла в данные json, переданные curl в bash - PullRequest
0 голосов
/ 17 мая 2019

У меня есть скрипт CloudFormation, который содержит контент json, который мне нужно заменить на поле json внутри тела сообщения или данные запроса POST curl, который я сделаю.

Файл CloudFormation выглядит следующим образом:

{ "AWSTemplateFormatVersion": "2010-09-09", "Description": 
...}

Проблема в том, что я попробовал код ниже, но он не работает.Тем не менее, я копирую и вставляю содержимое файла CloudFormation в тело моего запроса POST, он работает как положено.Это означает, что это проблема подстановки или сценариев.

CLOUD_FORMATION_FILE=/home/developer/workspace/blah/blah/infrastructure/templates/component.json
template=`cat $CLOUD_FORMATION_FILE`
echo $template
curl -d '{"template": $(echo $template)}' \
-H 'Content-Type: application/json' https://base.url.com/v1/services/component-proxy/test/stacks/test-component-proxy-component \
--cert /etc/pki/tls/certs/client.crt --key /etc/pki/tls/private/client.key

Я получаю сообщение об ошибке:

{"error": "Invalid JSON. Expecting object: line 1 column 13 (char 13)"}

1 Ответ

0 голосов
/ 17 мая 2019

Вам нужно использовать двойные кавычки, чтобы подставить переменную в строку.

Нет необходимости использовать $(echo $variable), просто используйте $variable.

curl -d "{\"template\": $template}" \
-H 'Content-Type: application/json' https://base.url.com/v1/services/component-proxy/test/stacks/test-component-proxy-component \
--cert /etc/pki/tls/certs/client.crt --key /etc/pki/tls/private/client.key
...