bash中printf \r多行仅显示一行,如何实现三行实时更新?
实现多行内容实时更新(无新增行)
要实现三行内容每隔1秒更新且不新增行,核心是利用终端的ANSI光标控制转义序列,让光标回到之前的行位置覆盖原有内容,具体代码如下:
# 首次输出三行内容 printf '%s\n%s\n%s' 'first line here' 'second line here' 'third line here' sleep 1 # 光标向上移动3行,回到第一行开头 printf '\033[3A' # 输出新内容覆盖原有三行 printf '%s\n%s\n%s' 'iam new' 'new again' 'and new' sleep 1 # 可选:循环更新示例(重复3次) count=0 while [ $count -lt 3 ]; do printf '\033[3A' printf '%s\n%s\n%s' "Line 1: 第$((count+1))次更新" "Line 2: 第$((count+1))次更新" "Line 3: 第$((count+1))次更新" sleep 1 count=$((count+1)) done
关键说明
\033[3A:ANSI转义序列,控制光标向上移动3行,这样后续的printf会从第一行开始覆盖原有内容- 初始输出用
\n换行生成三行,替代原代码中的\r(\r仅能回到当前行首,无法跨行覆盖) - 循环更新时,每次执行
\033[3A回到三行顶部,再输出新内容即可实现无新增行的更新
内容的提问来源于stack exchange,提问作者Anas
相关产品推荐
相关产品推荐

