bash - 在 bash 命令中为每个 pod 删除添加睡眠时间
问题描述
我有以下 bash 命令:
oc get pods -o wide \
| grep -v asm \
| grep -v fnd \
| grep -v key \
| grep -v apiwg \
| grep -v cbkc \
| grep -v container \
| grep -v apigw \
| grep -v apacheds \
| grep -v couchbase-service \
| grep -v catalogone-tool-job \
| grep -v connector \
| grep -v operator \
| grep -v broker \
| grep -v logicaldate \
| grep -v oc-audit \
| grep -v oc-cb-01-000 \
| grep -v light-tracer \
| grep -v rule-engine \
| awk '{print $1}' \
| grep -v NAME \
| xargs oc delete pod --force --grace-period=0
我正在尝试为每个 pod 删除 ( xargs oc delete pod
) 触发睡眠计时器,我有什么选择?
解决方案
xargs
如果要一个一个删除, 我认为不是合适的工具。xargs
旨在批量处理参数。如果oc delete pod ...
一个接一个地执行是可以接受的,你可以通过 -n 1
,但是你也可以使用一个 for 循环。最重要的是,你有很多不必要的 grep 调用。我会做这样的事情:
declare -a PODS=$(
oc get pods -o wide | grep -v \
-e asm \
-e fnd \
-e key \
-e apiwg \
-e cbkc \
-e container \
-e apigw \
-e apacheds \
-e couchbase-service \
-e catalogone-tool-job \
-e connector \
-e operator \
-e broker \
-e logicaldate \
-e oc-audit \
-e oc-cb-01-000 \
-e light-tracer \
-e rule-engine | awk '{print $1}' | grep -v NAME
)
for i in "${PODS[@]}"; do
oc delete pod --force --grace-period=0 "$i"
sleep 10
done
编辑:由于 OP 要求它是一个命令;您可以PODS
使用顶部的命令替换数组,如下所示:
for i in "$(oc get pods -o wide | ... )"; do
oc delete pod --force --grace-period=0 "$i";
sleep 10;
done
您也可以交互地使用 for 循环,没有限制,您只需添加分号来表示命令的结尾,然后在一行中键入所有内容。注意引用的子shell:"$(...)"
. 保持这一点很重要,以防您的容器名称中有空格(感谢@RenaudPacalet 的改进)。
推荐阅读
- angular - 从 canActivate 导航时的角度路由器无限循环
- mjml - 如何在 MJML 中使用 php 变量
- r - 计算面板中 os 个人的数量以及他们在面板中出现的次数
- javascript - 从对应于 Key 的 JSON 角度提取数据
- c++ - C++:安全使用 vsprintf
- javascript - 如何根据另一个自动完成字段清除自动完成材料 ui 字段?
- shell - Jenkins 将参数作为 env 传递给 shell 脚本,以将 sh 传递给 kubernetes pod
- node.js - 当我在 eggjs 模型的“findAll”函数中使用“Op.notLike”时,如何避免转义字符 \"?
- laravel-5 - 如何从 laravel 5 的包中将中间件附加到现有的命名路由?
- python - 在 S3 存储桶上的 python 中运行图像处理算法