我想将一个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
然后迭代结果?
谢谢!
发布于 2022-02-14 20:44:33
#!/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的当前状态和输出的数据。
我们可以将循环输出的重定向移到done
之后。
我们需要正确引用所有的扩展,以避免分裂和文件名全球化的发生。
我用的是小写变量名。
其他有关问题:
https://unix.stackexchange.com/questions/690612
复制相似问题