amazon-web-services - 我正在尝试从 bash 返回从 aws cli 调用返回到控制台的每一行的结果。请指教
问题描述
我正在尝试收集 AWS 区域中的所有实例(describe-instances),然后从使用第一个命令找到的每个实例的特定 AMI(describe-images)中 grep 某些行。我不想先将其转储到文件中。
for AMI in "aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}'";
do "aws ec2 describe-images --image-ids $AMI |grep '"Name"\|ProductCodeId\|ProductCodeType'";done
我的语法有什么问题?谢谢!
错误:ec2-user@ip-172-31-20-000:~> ./Get-Instance-Meta.sh ./Get-Instance-Meta.sh:第 4 行:意外令牌附近的语法错误aws'
./Get-Instance-Meta.sh: line 4:
aws ec2 describe-实例 --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}';'
预期的第一个命令输出:
ec2-user@ip-172-31-20-000:~> grep ImageId | aws ec2 describe-instances --region=us-west-2 |grep -o -P 'ami.{0,18}'
ami-02bf6f88fab67448b
ami-0d59109fccbbc4da2
ami-01a80cb1b7a431fb9
ami-0d86f04dd6dfc89df
预期的第二个命令输出:
ec2-user@ip-172-31-20-214:~> aws ec2 describe-images --image-ids ami-01a80cb1b7a431fb9 |grep '"Name"\|ProductCodeId\|ProductCodeType'
"ProductCodeId": "51luq5gebk3opt7gcvkdrrm89",
"ProductCodeType": "marketplace"
"Name": "OpenSUSE_Leap15.1TaskcatPython3_",
我基本上是在查看 ProductCodeID 或 ProductCodeType 为“null”的所有实例
解决方案
看来您使用了错误的引号。
"aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}'"
不被执行。您将不得不使用反引号 `` 或$()
代替"
引用您的命令。例如
$(aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}')
$()
意味着您将命令的输出作为参数返回。"
意味着引用的是一个很长的论点,这似乎不是你想要的。在您第二次使用时,"
您希望像往常一样将输出打印到控制台,因此您可以"
完全省略。把它放在一起你得到:
for AMI in $(aws ec2 describe-instances --region=us-west-2 |grep ImageId |grep -o -P 'ami.{0,18}');
do aws ec2 describe-images --image-ids $AMI |grep '"Name"\|ProductCodeId\|ProductCodeType';done
推荐阅读
- python - 使用 for 循环遍历 AWS 工作区时出错
- azure - 如何在用户上下文中查询 MS Graph API?
- java - 队列线程池执行器中的最大等待时间
- javascript - MongoDB Cache 聚合的通用部分
- azure - Azure AD 用户创建源
- python - pymongo:insert_one() 正在运行,但没有向 mongodb 数据库添加任何内容?
- arrays - Minizinc:根据数组位置设置枚举选项集,而不是所有数组位置的选项集
- java - 返回它们在嵌套哈希图中具有最低值的键
- node.js - 使用 node.js 从 LAN 中的私有 IP 检索计算机名称/NETBIOS 名称
- dependency-injection - NestJS 使用 Jest 进行 E2E 测试。注入的服务返回未定义(仅测试)