首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析命令输出,以便在下一个命令中使用

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

Unix & Linux用户
提问于 2022-02-14 13:45:50
回答 1查看 321关注 0票数 1

我想将一个gcloud命令输出的每一行用于另一个gcloud命令中。

gcloud container clusters list |grep jesse (别名gccl)输出:

代码语言:javascript
运行
复制
jesse-gke1                us-eastx-x
jesse-gke2                us-eastx-x

在下一个命令中,我需要这两个变量(名称和区域)。

但是,当我尝试使用awk获取下一个命令所需的变量时,它会将这两个结果组合成一个带有2行行的变量。

cluster=$(gccl 2>/dev/null|grep jesse|awk '{print $1}') ; echo $cluster

产出:

代码语言:javascript
运行
复制
jesse-gke1
jesse-gke2

如何在如下命令中获得两个输出项:

gcloud someaction jesse-gke1 zone=us-eastx-x

然后迭代结果?

谢谢!

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-02-14 20:44:33

代码语言:javascript
运行
复制
#!/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之后。

我们需要正确引用所有的扩展,以避免分裂和文件名全球化的发生。

我用的是小写变量名。

其他有关问题:

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/690612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档