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

时间:2019-01-20 12:02:45

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

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

我尝试使用 clear 命令。但是使用 clear 可以刷新终端上的所有行,但是我想刷新特定的行。就像在

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

时间:20:35

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

我只希望刷新“ 20:35”部分,而不刷新“ =====“和“时间:””。

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)”部分,但什么也没显示。

1 个答案:

答案 0 :(得分:0)

您可以使用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”之类的内容作为延迟,以避免加重系统负担。