有没有linux程序连续运行另一个程序不闪烁?

is there a linux program to continuously run another program without flicker?

我想运行一个命令行程序在无限循环中一次又一次。
程序偶尔会输出不同的数据。

每当输出新数据时,我想覆盖以前的数据。

示例:
以下程序将输出一天中的时间。

#include <stdio.h>
#include <time.h>

int main (){
  time_t rawtime;
  struct tm * timeinfo;
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  printf ( "Current local time and date: %s", asctime (timeinfo) );
}

天真的方法如下:

while true; do ./main; clear; done

当然,这会每隔 运行 清屏,并导致闪烁。

我当然可以将其通过管道传输到自定义程序中,该程序仅在更改时刷新输出,
但我希望找到使用标准 linux 命令
的解决方案 (或 Bash 语言功能)。

程序输出可能是多行的,所以返回(/r)和重写不是一个选项。

应该这样做:

while true; do LINE=$(date) | echo -en "\r$LINE"; done

用感兴趣的程序替换 date,但它制作了一个很酷的演示。

以这种方式使用管道可以防止在有新输出要打印之前进行清除,并使清除和打印新输出一步到位。

警告:如果 something 打印多于一行,这将无法正确清除。 另一方面,它不会像 watchclear 那样破坏您的整个终端屏幕。

如果您有可用的命令 watch,您可以使用它。只需输入

watch ls