Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need a progress indicator for a Perl system() command using T:R:G mod

I want a progress indicator that takes the output of a Perl

   system('make')

and for each line output to STDOUT from the make command, I want to output a dot as a progress indicator. Unfortunately, I'm using the Term::ReadLine::Gnu Perl mod.

How do I redirect STDOUT to capture and count the lines as the make command is running?

like image 505
bitbucket Avatar asked Dec 21 '22 13:12

bitbucket


2 Answers

#!/usr/bin/perl

my $command = "make";

open (my $cmd, "$command |");
while(<$cmd>){
  print ".";
}
print "\n";
like image 119
wespiserA Avatar answered Dec 30 '22 18:12

wespiserA


make >& >(while read f; do echo -n .; done; echo)

Obviously this is a shell solution, but a dot as a progress indicator is a dot.

You could of course stick a tee in there to save a copy of the make to file in case of problems.

Since you didn't seem to like (neither upvoted or accepted) the shell solution for some unexplained reason, here is a pure perl one:

if (open(X,"make|")) { local($|)=1; while(<X>) { print "."; } close(X); print "\n";}
like image 28
Seth Robertson Avatar answered Dec 30 '22 17:12

Seth Robertson