解析命令输出以便在下一个命令中使用

解析命令输出以便在下一个命令中使用

我想将一个 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

我们需要正确引用所有扩展,以避免发生拆分和文件名通配。

我使用小写变量名。

相关其他问题:

相关内容