如何在Bash中判断节点已删除?实现kubectl返回无资源时退出循环
修改循环逻辑,基于输出内容判断退出时机
原来的循环依赖kubectl命令的退出码判断,但kubectl在返回“No resources found”时往往退出码为0(命令执行成功,只是无资源返回),所以需要改为检查命令输出内容来触发退出。
修改后的代码如下:
while true; do # 捕获kubectl命令的所有输出(包含stdout和stderr) output=$(kubectl get nodes -o wide 2>&1) # 打印输出,保持和原逻辑一致的可视化反馈 echo "$output" # 检查输出中是否包含"No resources found"字符串 if echo "$output" | grep -q "No resources found"; then echo "Nodegroup deleted successfully" break fi # 增加休眠时间,避免频繁请求API服务器,可按需调整时长 sleep 10 done
关键修改点说明:
- 用
$(kubectl ... 2>&1)捕获命令的全部输出到变量,确保不会漏掉任何提示信息(部分场景下提示可能输出到stderr)。 - 使用
grep -q静默检查目标字符串:-q参数让grep只返回退出码,不输出匹配内容,让判断逻辑更简洁高效。 - 新增
sleep 10是为了降低循环频率,减少对K8s API服务器的请求压力,你可以根据实际情况调整休眠秒数。
内容的提问来源于stack exchange,提问作者deagleshot
相关产品推荐
相关产品推荐

