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

标签 linux bash shell windows-subsystem-for-linux

我正在编写 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”之类的内容作为延迟,以避免给系统带来负担。

关于linux - 如何更新终端上特定行的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54276228/

相关文章:

linux - Bash/Shell 脚本 - 如何操作文本文件中的值

linux - 在linux中打印文件的最后2行

linux - 在cshrc中执行别名

python - 如何在 python 中的第二个提示符中导航

linux - 读取文本文件的系统调用

linux - 你怎么能有一个回到同一个端口的 TCP 连接?

c++ - NaCl 和共享内存

bash - tar:使用 -X 时从成员名称中删除前导/(排除文件)

linux - Shell 脚本 -path 和运行命令在一行中

来自另一个脚本错误处理程序的 Bash 函数