私は次のような動作するコードを持っています(これは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)を使用して、次のような2つの実行に集中させることはできますか?
long AWS command >> echo $element $MOUNT_SOURCE >> /etc/hosts
現在の実装では、配列内の変数と同じ回数だけエコーが実行されますか?これをどのように書き直しますか?
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
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
(上)または外部(下)のさまざまな方法で発生する可能性があります。ここには実際には配列コンテキストや繰り返されるものはないので、ループは必要ありません。