From owner-freebsd-hackers@FreeBSD.ORG Sat Jun 5 20:32:11 2010 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1CB33106566B for ; Sat, 5 Jun 2010 20:32:11 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from mail2.fluidhosting.com (mx21.fluidhosting.com [204.14.89.4]) by mx1.freebsd.org (Postfix) with ESMTP id A1DAF8FC08 for ; Sat, 5 Jun 2010 20:32:10 +0000 (UTC) Received: (qmail 8834 invoked by uid 399); 5 Jun 2010 20:32:09 -0000 Received: from localhost (HELO foreign.dougb.net) (dougb@dougbarton.us@127.0.0.1) by localhost with ESMTPAM; 5 Jun 2010 20:32:09 -0000 X-Originating-IP: 127.0.0.1 X-Sender: dougb@dougbarton.us Message-ID: <4C0AB448.2040104@FreeBSD.org> Date: Sat, 05 Jun 2010 13:32:08 -0700 From: Doug Barton Organization: http://SupersetSolutions.com/ User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.9.1.9) Gecko/20100330 Thunderbird/3.0.4 MIME-Version: 1.0 To: Bakul Shah References: <20100605201242.C79345B52@mail.bitblocks.com> In-Reply-To: <20100605201242.C79345B52@mail.bitblocks.com> X-Enigmail-Version: 1.0.1 OpenPGP: id=1A1ABC84 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org Subject: Re: head behaviour X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Jun 2010 20:32:11 -0000 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. Doug -- ... and that's just a little bit of history repeating. -- Propellerheads Improve the effectiveness of your Internet presence with a domain name makeover! http://SupersetSolutions.com/