我想在无限循环内一次又一次地运行命令行程序 该程序偶尔会输出不同的数据。
每当输出新数据时,我希望覆盖以前的数据。
示例:
以下程序将输出一天中的时间。
#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)和重写不是一种选择。
答案 0 :(得分:4)
如果您有watch
命令,则可以使用它。只需输入
watch ls
答案 1 :(得分:1)
应该这样做:
while true; do LINE=$(date) | echo -en "\r$LINE"; done
将date
替换为感兴趣的程序,但这是一个很酷的演示。
以这种方式使用管道可以防止清除,直到有新的输出要打印,并且只需一步即可清除和打印新的输出。
警告:如果something
打印多行,则无法正确清除。
另一方面,它并不像watch
或clear
那样核对整个终端屏幕。