Pergunta

Eu quero um indicador de progresso que pegue a saída de um Perl

   system('make')

e para cada saída de linha para STDOUT do comando make, quero gerar um ponto como um indicador de progresso.Infelizmente, estou usando o mod Term::ReadLine::Gnu Perl.

Como redireciono STDOUT para capturar e contar as linhas enquanto o comando make está em execução?

Foi útil?

Solução

#!/usr/bin/perl

my $command = "make";

open (my $cmd, "$command |");
while(<$cmd>){
  print ".";
}
print "\n";

Outras dicas

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

Obviamente, esta é uma solução shell, mas um ponto como indicador de progresso é um ponto.

É claro que você pode colocar uma camiseta lá para salvar uma cópia da marca no arquivo em caso de problemas.

Como você não pareceu gostar (nem votou nem aceitou) da solução Shell por algum motivo inexplicável, aqui está uma solução Perl pura:

if (open(X,"make|")) { local($|)=1; while(<X>) { print "."; } close(X); print "\n";}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top