【问题标题】:How to update text of a specific line on terminal?如何更新终端上特定行的文本?
【发布时间】:2019-01-20 12:02:44
【问题描述】:

我正在编写 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)”部分,但它什么也没显示。

【问题讨论】:

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


    【解决方案1】:

    您可以使用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”的内容作为延迟以避免给系统带来负担。

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2012-06-27
      • 2012-02-07
      • 1970-01-01
      相关资源
      最近更新 更多