问题
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?
回答1:
#!/usr/bin/perl
my $command = "make";
open (my $cmd, "$command |");
while(<$cmd>){
print ".";
}
print "\n";
回答2:
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";}
来源:https://stackoverflow.com/questions/6052345/need-a-progress-indicator-for-a-perl-system-command-using-trg-mod