简体   繁体   English

Bash 脚本从 AWS 命令行客户端循环访问 output

[英]Bash script to loop through output from AWS Command Line Client

I'm getting a list of EC2 instances and then trying to loop through them but for some reason I'm not able to get the loop to work.我正在获取 EC2 实例列表,然后尝试循环遍历它们,但由于某种原因我无法使循环正常工作。

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

echo $output displays something like: echo $output显示如下:

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

Then I create an array like this:然后我创建一个这样的数组:

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

echo ${instances[0]} and echo ${instances[1]} gives the correct output. echo ${instances[0]}echo ${instances[1]}给出正确的 output。

And then try to iterate through the array:然后尝试遍历数组:

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

But I get:但我得到:

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

Instead of:代替:

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

What am I doing wrong?我究竟做错了什么? And is there a better way to loop through the results, maybe rather using the json output format?有没有更好的方法来遍历结果,也许更确切地说使用 json output 格式?

I am not sure if you got an answer for this question. 我不确定你是否得到了这个问题的答案。 Will this help? 这会有帮助吗?

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

For windows cli: 对于Windows cli:

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

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

This also works for me, add it to a bash array:这也适用于我,将其添加到 bash 数组:

for instance in $(aws ec2 describe-instances --filters "Name=tag:Application,Values=yourValue" "Name=tag:Environment,Values=development" --query 'Reservations[*].Instances[*].InstanceId' --output text); do envInstances+=(${instance}); done

for i in ${envInstances[@]}; do echo "hello $i"; done

hello i-instance1
hello i-instance12
hello i-instance16

Not sure if you just gave up, but in BASH, better to just do this:不确定你是否只是放弃了,但在 BASH 中,最好只这样做:

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

then (if you want a count)然后(如果你想要计数)

echo "${#OUTPUT[@]} instances found." echo "找到 ${#OUTPUT[@]} 个实例。"

Good luck!祝你好运!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Bash - 检查 AWS CLI 命令 output 是否为空 - Bash - Check if AWS CLI command output is empty 在 bash 脚本中将变量传递给 aws cli 命令 - Passing variables to aws cli command in bash script 提取aws命令的output,并使用jq赋值给bash中的一个变量 - Extracting output of aws command and assign it to a variable in bash using jq AWS EB (Elastic Beanstalk) CLI 在 git bash 的命令行中不工作 - AWS EB ( Elastic Beanstalk) CLI not working in the command line of git bash -bash:aws:找不到命令 - -bash: aws: command not found 从命令行重新部署 AWS CodeDeploy - AWS CodeDeploy redeployment from command line 通过 AWS 命令行从 AWS RDS 导出 MySQL 转储 - Export MySQL dump from AWS RDS via AWS Command Line Bash 循环脚本,用于从两个文件创建 Keyvault Secrets - Bash script for loop, for creating Keyvault Secrets from two files 使用通过 Docker 安装的 Jenkins 运行 AWS 命令行界面:找不到命令? - Running AWS Command Line Interface using Jenkins installed through Docker: command not found? 当我具体指定要下载的内容时,AWS S3 会从一个存储桶中下载所有内容。 在 bash shell 中的行为不同于命令行 - AWS S3 downloads all from a bucket when I specify what to download specifically. Behaves different in bash shell than command line
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM