有没有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
打印多于一行,这将无法正确清除。
另一方面,它不会像 watch
或 clear
那样破坏您的整个终端屏幕。
如果您有可用的命令 watch
,您可以使用它。只需输入
watch ls
我想运行一个命令行程序在无限循环中一次又一次。
程序偶尔会输出不同的数据。
每当输出新数据时,我想覆盖以前的数据。
示例:
以下程序将输出一天中的时间。
#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
打印多于一行,这将无法正确清除。
另一方面,它不会像 watch
或 clear
那样破坏您的整个终端屏幕。
如果您有可用的命令 watch
,您可以使用它。只需输入
watch ls