【问题标题】:Bash script to loop through output from AWS Command Line Client用于循环从 AWS 命令​​行客户端输出的 Bash 脚本
【发布时间】:2016-07-26 22:33:58
【问题描述】:

我正在获取 EC2 实例的列表,然后尝试遍历它们,但由于某种原因,我无法使循环正常工作。

output="$(aws ec2 describe-instances --filters 'Name=tag:Environment,Values=development' --query '[Reservations[*].Instances[*].PublicDnsName]' --output text)"

echo $output 显示如下内容:

ec2-55-55-555-555.eu-west-1.compute.amazonaws.com
ec2-66-66-666-666.eu-west-1.compute.amazonaws.com

然后我创建一个这样的数组:

instances=(${output//'\n'/ })

echo ${instances[0]}echo ${instances[1]} 给出正确的输出。

然后尝试遍历数组:

for i in $instances; do echo instance: "$i"; done

但我明白了:

实例:ec2-55-55-555-555.eu-west-1.compute.amazonaws.com ec2-66-66-666-666.eu-west-1.compute.amazonaws.com

代替:

instance: ec2-55-55-555-555.eu-west-1.compute.amazonaws.com
instance: ec2-66-66-666-666.eu-west-1.compute.amazonaws.com

我做错了什么?有没有更好的方法来循环遍历结果,也许是使用 json 输出格式?

【问题讨论】:

  • 尝试运行for i in $output; do echo $i; done
  • 我试过了,它回显了整个变量。不拆分行。
  • 怎么样:for i in "${instances[@]}"; do ...?
  • 只需添加一个行分隔符:for i in $instances; do echo instance: "$i"$'\n'; done
  • 另请参阅Bash FAQ 001,了解如何正确地从流中逐行读取。

标签: bash loops aws-cli aws-ec2


【解决方案1】:

我不确定你是否得到了这个问题的答案。这会有帮助吗?

for dns in $(aws ec2 describe-instances --region ap-northeast-1 --query 'Reservations[*].Instances[*].PublicDnsName' --output text) ; do echo $dns ; done

【讨论】:

  • 我们如何在多列中做到这一点?
【解决方案2】:

对于windows cli:

aws ec2 describe-instances --query "Reservations[].Instances[].InstanceId" > 实例

FOR /f %i IN (instances) DO aws ec2 terminate-instances --instance-ids %i

【讨论】:

  • 问题要求一个 bash 脚本
  • 但很有用。投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-31
相关资源
最近更新 更多