是否有一个Linux程序连续运行另一个没有闪烁的程序?

时间:2016-09-12 21:38:06

标签: linux bash shell terminal command

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

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

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

#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

当然,这会在每次运行时清除屏幕,并导致闪烁 enter image description here

我当然可以将它管道化为一个只在更改时刷新输出的自定义程序,
但我希望找到一个使用标准linux命令的解决方案 (或Bash语言功能)。

程序输出可能是多行的,因此返回(/ r)和重写不是一种选择。

2 个答案:

答案 0 :(得分:4)

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

即可
watch ls

答案 1 :(得分:1)

应该这样做:

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

date替换为感兴趣的程序,但这是一个很酷的演示。

以这种方式使用管道可以防止清除,直到有新的输出要打印,并且只需一步即可清除和打印新的输出。

警告:如果something打印多行,则无法正确清除。 另一方面,它并不像watchclear那样核对整个终端屏幕。