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"