![如何将多个结果传递到一个命令中?](https://linux22.com/image/153691/%E5%A6%82%E4%BD%95%E5%B0%86%E5%A4%9A%E4%B8%AA%E7%BB%93%E6%9E%9C%E4%BC%A0%E9%80%92%E5%88%B0%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E4%B8%AD%EF%BC%9F.png)
我有一段有效的代码,如下所示(请注意,这是在用于 AWS 自动部署的 CloudFormation 模板内):
EFS_SERVER_IPS_ARRAY=( $(aws efs describe-mount-targets --file-system-id ${SharedFileSystem} | jq '.MountTargets[].IpAddress' -r) )
echo "IPs in EFS_SERVER_IPS_ARRAY:"
for element in "${EFS_SERVER_IPS_ARRAY[@]}"
do
echo "$element"
echo "$element $MOUNT_SOURCE" >> /etc/hosts
done
这可行但看起来很丑。我想避免数组变量和for
循环(基本上我不关心第一个 echo 命令)。
我可以以某种方式使用输出($element,它是 1 个或多个,当前是 2 行 IP)并将其汇集到类似以下内容的两次执行中:
long AWS command >> echo $element $MOUNT_SOURCE >> /etc/hosts
在当前的实现中,echo 执行的次数与数组中变量的次数一样多?我将如何重写这个?
AWS命令的输出如下:
10.10.10.10
10.22.22.22
然后,添加的行/etc/hosts
如下所示:
10.10.10.10 unique-id.efs.us-east-1.amazonaws.com
10.22.22.22 unique-id.efs.us-east-1.amazonaws.com
答案1
aws efs describe-mount-targets --file-system-id ${SharedFileSystem} \
| jq --arg mntsrc "$MOUNT_SOURCE" '.MountTargets[].IpAddress | . + $mntsrc' -r >> /etc/hosts
或者,如果您愿意,
aws efs describe-mount-targets --file-system-id ${SharedFileSystem} \
| jq '.MountTargets[].IpAddress' -r | sed -e "s~\$~$MOUNT_SOURCE~" >> /etc/hosts
所发生的一切都是在每行末尾添加一些额外的固定文本,这可以在jq
(顶部)或外部(底部)以各种方式发生。这里实际上没有任何数组上下文或任何重复的内容,因此您不需要循环。