【问题标题】:Passing variable to aws cli inline json将变量传递给 aws cli 内联 json
【发布时间】:2020-07-24 09:24:58
【问题描述】:

我编写了一个脚本来在本地堆栈上创建 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 将它作为一个字符串并试图找到一个 url 为“$arn”的 sqs 并且失败了。我也尝试删除报价。在这种情况下,错误是格式错误的字符串。

如果我在那里使用 arn 值作为字符串,而不是 arn 变量,它就可以工作。

如果可能的话,谁能告诉我如何在该内联 json 中传递该变量?

感谢您的阅读:)

阴影

【问题讨论】:

  • 这与另一个问题类似,在此处回答:stackoverflow.com/a/36778045/3121039 尝试使用“此处文档”的建议。 (您也可以直接回显字符串以查看 $arn 在用单引号括起来时不会扩展。)
  • 我会试试的,谢谢。

标签: json bash aws-cli amazon-sqs localstack


【解决方案1】:

我能够以成功的结果执行以下操作,授予它不处理 json(因为我只是通过 sed 替换令牌),但我更新了我的示例并至少在 bash 中用什么对其进行了测试我在做:

#!/bin/bash
export awscmd="aws --region us-east-1 iam"
function setArn() {
  ${awscmd} list-policies --query 'Policies[?PolicyName==`'${1}'`].{ARN:Arn}' --output text
}

arn=$(setArn "some-policy-name")
echo '{"RedrivePolicy":"{"deadLetterTargetArn":"'$arn'", "maxReceiveCount":"5"}"}'

$ ./somearntest.sh
{"RedrivePolicy":"{"deadLetterTargetArn":"arn:aws:iam::############:policy/some-policy-name", "maxReceiveCount":"5"}"}

注意使用单个 tic 来连接字符串之外的输出结果。这是在 bash 4 中,我删除了转义的 \",因为我认为这是错误添加的;ymmv。

【讨论】:

  • 谢谢你的例子。我会试一试,我觉得这对我有用。再次感谢
【解决方案2】:

这里的问题是您试图在单引号内扩展 bash 变量。像这样使用单引号通常是将一堆字符串和不可输出的东西作为一个参数传递。如果你不能用双引号替换它们,你将不得不求助于肮脏的eval hacks,我不推荐这样做。

这是一个例子:

$ 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"}}

我建议查看How eval worksExpansion of variables inside single quotes了解更多信息

【讨论】:

  • 谢谢。我会做一些研究,看看我发现了什么。再次感谢您指出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
相关资源
最近更新 更多