Передача переменной в aws cli inline json - PullRequest
0 голосов
/ 11 апреля 2020

Я написал скрипт для создания ресурса sqs в локальном стеке. Я хотел передать значение, которое я получаю от одной команды cli к другой, но внутри встроенного json. Ниже приведен раздел рассматриваемого скрипта.

arn=$(aws --endpoint-url=http://localhost:4576 sqs get-queue-attributes \
--queue-url http://localhost:4576/my_dead_letter_queue_url \
--query 'Attributes.QueueArn' \
--output text)

aws --endpoint-url=http://localhost:4576 sqs create-queue \
--queue-name my_queue \
--attributes \
'{"RedrivePolicy":"{\"deadLetterTargetArn\":\"$arn\", \"maxReceiveCount\":\"5\"}"}'

Итак, я пытаюсь передать эту переменную "arn", но cli принимает ее как строку и пытается найти sqs с url "$ Арн "и терпит неудачу. Я также попытался удалить цитату. В этом случае ошибка является искаженной строкой.

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

Может кто-нибудь показать мне, как передать это переменная внутри этой строки json если это возможно?

Спасибо, что прочитали:)

Shahed

1 Ответ

0 голосов
/ 12 апреля 2020

Проблема в том, что вы пытаетесь раскрыть переменную bash внутри одинарных кавычек. Использование одинарных кавычек, как это обычно для передачи набора строк и некоммерческого материала в качестве одного аргумента. Если вы не можете заменить их двойными кавычками, вам придется прибегнуть к грязным eval взломам, которые я не рекомендую.

Вот пример:

$ arn=foobar
$ echo '{"RedrivePolicy":"{\"deadLetterTargetArn\":\"$arn\", \"maxReceiveCount\":\"5\"}"}'
{"RedrivePolicy":"{\"deadLetterTargetArn\":\"$arn\", \"maxReceiveCount\":\"5\"}"}
$ eval echo '{"RedrivePolicy":"{\"deadLetterTargetArn\":\"$arn\", \"maxReceiveCount\":\"5\"}"}'
{RedrivePolicy:{"deadLetterTargetArn":"foobar", "maxReceiveCount":"5"}}

Для Более подробную информацию я предлагаю проверить Как работает eval и Расширение переменных внутри одинарных кавычек

...