可以使用反引号(backquote)或子 shell 命令 ($(command)
) 将第一个命令的输出作为第二个命令的参数。例如,假设要将 EC2 实例的 ID 列表作为 S3 bucket 的 ACL 参数:
aws ec2 describe-instances | jq -r '.Reservations[].Instances[].InstanceId' | xargs -I {} aws s3api put-object-acl --acl public-read --bucket my-bucket --key "path/to/instance-{}.txt"
在这里,aws ec2 describe-instances
返回一个 JSON,其中包含 EC2 实例的信息。使用 jq
将实例 ID 列表提取出来,并将该列表传递给 xargs,其中 -I {}
指定了占位符,aws s3api put-object-acl
使用该占位符将每个 ID 都替换成 S3 bucket 的对象路径。
这里是使用子 shell 命令的示例:
aws s3 cp $(aws ec2 describe-instances | jq -r '.Reservations[].Instances[].PublicDnsName') s3://my-bucket/ec2-instances/
在这里,aws ec2 describe-instances
返回 JSON,其中包含 EC2 实例的公共 DNS 名称。使用 jq -r
提取值并将其传递给 aws s3 cp
命令,在此期间,子 shell 命令 $(...)
将命令的输出作为其参数。