【发布时间】:2015-02-26 05:24:05
【问题描述】:
我正在编写一个脚本,该脚本旨在检查某个状态、输出结果、休眠一小段时间,然后重新开始一切。输出由多行组成,我希望脚本更新输出,这意味着再次在同一行上打印。它应该可以在 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 将光标移回。但是,当输出太长并且跨越两条或更多终端线时,这不起作用。
【问题讨论】: