On Sat, 05 Jun 2010 13:32:08 PDT Doug Barton <do...@freebsd.org>  wrote:
> On 06/05/10 13:12, Bakul Shah wrote:
> > Consider:
> >
> > $ yes | cat -n | (read a; echo $a; head -1)
> > 1   y
> >       2     y
> >
> > $ yes | cat -n | (head -1; read a; echo $a)
> >       1     y
> > 456 y
> 
> It's not at all clear to me what you are trying to accomplish here. If 
> what you want is to read only the first line of the output of yes, then 
> what you'd want to do is:
> 
> yes | cat -n | head -1 | (read a; echo $a)
> 1 y
> 
> > As you can see, head reads far more than it should.  This is
> > fine most of the time but often it results in surprising
> > output:
> >
> > # print ps header and all lines with sh in it
> > $ ps|(head -1; grep sh)
> >    PID  TT  STAT      TIME COMMAND
> 
> I don't understand why you think this would work. There is no input to 
> the grep command. The only reason it exits at all is that you are 
> executing in a subshell.
> 
> > # print first and last two lines
> > $ look xa | (head -2; tail -2)
> > xanthaline
> > xanthamic
> 
> Same problem here. There is no input to the tail command.

In general this is not true.  Without running the following
can you guess its output?

$ look '' | (head -2; head -2)

Will it produce
    A
    a
or
    A
    a
    aa
    aal
or
    A
    a
    sive
    abrastol
or something else?

Yes, we can always find a work around for a given case but
the issue is that head buffers up more than it needs to.
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to