我正在编写一个脚本,该脚本旨在检查某个状态,输出结果,休眠一小段时间,然后重新开始一切。输出由多行组成,我希望脚本更新输出,这意味着再次在同一行上打印。它应该可以在 Mac 和 Linux 上运行。这是我到目前为止所拥有的:
#! /usr/bin/perl
use strict;
print `tput sc`; # Store cursor position
my @lines;
while (1) {
@lines = ();
push(@lines, `tput rc`); # Restore cursor position
push(@lines, `tput ed`); # Clear from cursor to end of screen
push(@lines, `dd if=/dev/urandom bs=1 count=1`); # This is just an example
print @lines;
sleep 1;
}
只要我不在终端窗口末尾使用光标调用脚本,它就可以正常工作。在后一种情况下,光标在打印后停留在窗口的末尾,因此恢复它的原始位置实际上没有任何作用,下一个输出只是换行。
我怎样才能避免这种情况?
我不想打电话tput clear
,或者tput init
因为这可能会丢失任何以前的命令和输出。我正在考虑滚动窗口,以便在我开始输出之前提示位于顶行,但这需要当前光标行,我无法看到如何使用tput
.
或者,我可以记住打印的行数,然后使用tput rin
. 但是,当输出太长并且跨越两条或更多终端线时,这不起作用。