Por que a saída não é redirecionada para o arquivo?

2

tem a seguinte linha de comando que gera o vmstat a cada segundo com um registro de data e hora em cada linha através do script perl:

vmstat 15 | /home/Beer/addtimestamp.pl > File_1 

o conteúdo do addtimestamp.pl:

!/usr/bin/perl while (<>) { print localtime() . ": $_"; }

Então, por que a saída não é redirecionada para o arquivo "File_1"?

Funciona perfeitamente quando não, imprime a saída perfeitamente a cada segundo sem problemas.

    
por I AM L 11.12.2012 / 08:30

1 resposta

3

Você caiu no buffer Gotcha. O Perl armazena em buffer sua saída e só grava no disco quando o buffer está cheio. O armazenamento em buffer é uma coisa boa em termos de desempenho, mas a baixas taxas de dados pode ser confuso. Se você esperar o tempo suficiente, notará que seu arquivo está sendo gravado (verifique com tail -F File_1 ). Acredito que o buffer padrão tenha 4kB de tamanho.

Adicione $|=1 como abaixo para desativar o buffer em Perl:

vmstat 1 | perl -e '$| = 1; while (<>) { print localtime() . ": $_"; }' > /tmp/fileetje
    
por 11.12.2012 / 08:56