4

我想要一个获取 Perl 输出的进度指示器

   system('make')

对于从 make 命令输出到 STDOUT 的每一行,我想输出一个点作为进度指示器。不幸的是,我使用的是 Term::ReadLine::Gnu Perl mod。

如何在 make 命令运行时重定向 STDOUT 以捕获和计算行数?

4

2 回答 2

7
#!/usr/bin/perl

my $command = "make";

open (my $cmd, "$command |");
while(<$cmd>){
  print ".";
}
print "\n";
于 2011-05-19T00:29:13.623 回答
4
make >& >(while read f; do echo -n .; done; echo)

显然这是一个shell解决方案,但是一个点作为进度指示器就是一个点。

您当然可以在其中插入一个 T 恤,以便在出现问题时将制作的副本保存到文件中。

由于出于某种无法解释的原因,您似乎不喜欢(既不赞成也不接受)shell 解决方案,这里是一个纯粹的 perl 解决方案:

if (open(X,"make|")) { local($|)=1; while(<X>) { print "."; } close(X); print "\n";}
于 2011-05-19T00:06:43.790 回答