【问题标题】:aws-cli won't work with a variable I created in bashaws-cli 不适用于我在 bash 中创建的变量
【发布时间】:2021-12-18 13:31:51
【问题描述】:

我正在尝试编写一个用于创建 AWS SQS 队列的 bash 脚本,然后检查该队列是否为空。为此,我创建了以下应该返回“null”的脚本:

aws sqs create-queue --queue-name MessagesQueue

queue_url=$(aws sqs list-queues --query QueueUrls[0])

queue_check=$(aws sqs get_queue_attributes --queue_url $queue_url --attribute-names ApproximateNumberOfMessages --query Attributes[0].ApproximateNumberOfMessages

我反而收到了这个错误信息:

An error occurred (InvalidAddress) when calling the GetQueueAttributes operation: The address "https://eu-west-3.queue.amazonaws.com/XXXXXXXXXXXX/MessagesQueue" is not valid for this endpoint.

但是,如果我在命令中明确写入相同的地址而不是使用 $queue_url,它可以正常工作并返回“null”。

为什么它不接受 $queue_url 但如果我明确写它则接受相同的 URL 地址?

编辑:似乎 aws-cli 命令将变量 $queue_url 读取为单引号和双引号之间的 URL,当我明确编写它时,它读取的 URL 不带引号,所以这就是它接受它的原因。如何使用我创建的 bash 变量,以便 aws-cli 读取它而不使用引号?

【问题讨论】:

  • 在开头添加set -x命令,这样bash会在运行的时候打印一个执行轨迹,看看和运行时有什么不同。我不知道这是否是问题所在,但我建议在 $queue_url 周围加上双引号以避免奇怪的解析问题(变量引用几乎应该总是双引号)。
  • @GordonDavisson 我尝试添加set -x,显然唯一的区别是当我使用$queue_url(或"$queue_url")时,它会显示单引号和双引号之间的URL,如果我写它明确显示它根本没有引号,所以这可能是问题所在,我如何使用该变量以便 aws-cli 将其解释为没有引号的 url?

标签: bash aws-cli amazon-sqs


【解决方案1】:

我解决了,我只需要从输出中删除引号,然后我就这样做了:

queue_url=$(aws sqs list-queues --query QueueUrls[0])
queue_url="${queue_url%\"}"
queue_url="${queue_url#\"}"

另一个 stackoverflow 问题有帮助:Shell script - remove first and last quote (") from a variable

【讨论】:

    【解决方案2】:

    一旦我尝试逐部分运行您的代码(从 aws sqs list_queues ),我注意到:

    aws: error: argument operation: Invalid choice, valid choices are:
    ...
    Invalid choice: 'list_queues', maybe you meant:
      * list-queues
    

    尝试使用 list-queues 而不是 list_queues 并告诉他们进展如何。

    【讨论】:

    • 是的,我的错,我复制错了,但是代码写得很好,我已经在问题中编辑了它
    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 2018-06-06
    • 2014-10-26
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多