我想将一个 gcloud 命令输出的每一行用于另一个 gcloud 命令。
gcloud container clusters list |grep jesse
(别名 gccl)输出:
jesse-gke1 us-eastx-x
jesse-gke2 us-eastx-x
我在下一个命令中需要这两个变量(名称和区域)。
但是,当我尝试使用 awk 获取下一个命令所需的变量时,它将两个结果组合成一个包含 2 行的变量。
cluster=$(gccl 2>/dev/null|grep jesse|awk '{print $1}') ; echo $cluster
输出:
jesse-gke1
jesse-gke2
如何在命令中获取两个输出项,如下所示:
gcloud someaction jesse-gke1 zone=us-eastx-x
并迭代结果?
谢谢!
答案1
#!/bin/sh
gcloud container clusters list \
--filter=name:jesse --format="csv[no-heading](name,location)" |
while IFS=, read -r name location; do
printf 'Resizing NAME: %s, LOCATION: %s\n' "$name" "$location"
gcloud container clusters resize \
--zone "$location" "$name" --num-nodes=0 --quiet
done >gccl-script.log
这是重写你自己的代码,使用while
循环而不是for
循环。while
每当我们需要在循环中读取不确定数量的行时,就会使用循环,而循环则用于for
迭代静态列表。
我们也不需要数组,因为read
我们非常乐意将多个字段读入多个变量。
我们使用printf
而不是echo
打印可变数据。结果echo
取决于 shell 的当前状态和输出的数据。
我们可以将循环输出的重定向移至 after done
。
我们需要正确引用所有扩展,以避免发生拆分和文件名通配。
我使用小写变量名。
相关其他问题: