如何在bash脚本中覆盖终端多行输出 适配kubectl定时查询场景
多行输出覆盖解决方案
方案1:直接使用watch命令(推荐)
watch是Linux系统自带的专门用于定时重复执行命令、刷新输出的工具,不需要自行编写脚本,直接执行以下命令即可实现每2秒刷新一次kubectl get pods的输出,自动覆盖上一次的内容:
watch -n 2 kubectl get pods
如果需要高亮输出变化的内容,可以加-d参数:
watch -d -n 2 kubectl get pods
方案2:自行编写Bash脚本实现
你之前的脚本只用\r回车符只能移动光标到当前行首,无法处理多行内容,可按以下两种场景修改脚本:
场景A:允许清空当前终端屏幕
每次输出前调用clear命令清空整个屏幕即可:
#!/bin/bash while true do clear kubectl get pods sleep 2 done
场景B:不清除终端历史,仅覆盖脚本输出的内容
通过ANSI转义序列控制光标位置,每次输出后统计输出行数,下次输出前将光标上移对应行数后清除旧内容,大部分主流终端都支持该转义规则:
#!/bin/bash while true do output=$(kubectl get pods) # 统计输出内容的行数 line_num=$(echo "$output" | wc -l) # 输出新内容 echo "$output" sleep 2 # 光标上移line_num行,清除光标到屏幕末尾的所有旧内容 echo -ne "\033[${line_num}A\033[0J" done
内容的提问来源于stack exchange,提问作者testing495
相关产品推荐
相关产品推荐

