http://www.perlmonks.org?node_id=568158


in reply to Re: watch-script.pl | less +F buffering problem?
in thread watch-script.pl | less +F buffering problem?

Hi liverpole,

thanks for your reply.

I thought about the input buffers of less as well but was surprised to see that perl -e 'print "a line\n" x 10' | less +F works.

Another workaround is to send the output of my watch script to another file and oberserving this with "less +F".

My intention is to browse back the output over several pages and do occasional searches. I couldn't normally implement this myself.

Axel.

Replies are listed 'Best First'.
Re^3: watch-script.pl | less +F buffering problem?
by liverpole (Monsignor) on Aug 18, 2006 at 14:30 UTC
    That's because, in the case of:
    perl -e 'print "a line\n" x 10' | less +F
    the end-of-file is encountered as soon as the program finishes, so the pipe gets the end-of-file, and less knows it has received all the input it's going to get.

    Here's a good way to test it -- try executing the following command:

    perl -e 'while (1) {print "a line\n" x 1000; sleep 1}' | less

    Now the input buffer to less will fill up almost immediately, so you'll see the output right away.  However, if you execute the command "G", it will never find the end-of-file, because the end-of-file hasn't been written yet!

    Similarly if you execute the same command with less +G at the end instead of less, you'll never see output for the same reason.


    s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/