如何更新终端上特定行的文本?

How to update text of a specific line on terminal?

我正在编写 bash 脚本,但存在一个问题,即如何更新特定行的文本。

我试过使用 clear 命令。但是使用 clear 是刷新终端上的所有行,但我想刷新特定行。喜欢下

===============

时间:20:35

===============

我只想刷新“20:35”部分,没有“=====”和"TIME:"。

1)

while true
do
clear
echo "
===============
TIME: $(date +%H:%M)
==============="
done

2)

function TIME_RE(){
while true
do
printf "TIME: $(date +%Y.%m.%d) ($(date +%H:%M:%S)) \r"
done
}
echo "
===============
TIME: $(TIME_RE)
==============="

我希望第二个结果只刷新“$(TIME_RE)”部分,但它什么也没显示。

您可以使用ANSI escape codes移动光标位置,或保存和恢复光标位置。例如,使用光标向上顺序:

while true; do
echo -e "
===============
TIME: $(date +%Y.%m.%d) ($(date +%H:%M:%S))
===============
\e[5A"
sleep 1
done

备注:

  • 您需要 echo 的 -e 选项来打印转义序列。

  • "\e[5A"是向上移动5行的顺序

  • 添加类似 "sleep 1" 的内容作为延迟以避免给系统增加负担。