Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Sun, 12 Jan 2003 23:53:29 -0500 From: Jon LaBadie To: cygwin AT cygwin DOT com Subject: Re: Return codes and pipelines Message-ID: <20030113045329.GA15590@butch.jgcomp.com> References: <83040F98B407E6428FEC18AC720F5D73015BA93F AT exchange DOT tropicnetworks DOT com> <5 DOT 2 DOT 0 DOT 9 DOT 2 DOT 20030112141731 DOT 01df7bc8 AT pop3 DOT cris DOT com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5.2.0.9.2.20030112141731.01df7bc8@pop3.cris.com> User-Agent: Mutt/1.3.28i On Sun, Jan 12, 2003 at 02:21:45PM -0800, Randall R Schulz wrote: > Rolf, > > One posting is enough, really. > > There is no guaranteed or specified parent child relationship between the > processes in a pipeline. This means that you cannot predict which process's > status will be the one returned as that of the pipeline as a whole. > > > At 14:09 2003-01-12, Rolf Campbell wrote: > >/home/rcampbell> (true | true) && echo true || echo false > >true > >/home/rcampbell> (true | false) && echo true || echo false > >false > >/home/rcampbell> (false | true) && echo true || echo false > >true > >/home/rcampbell> (false | false) && echo true || echo false > >false > > > >The third test above yields different results when run on Linux. I'm > >wondering if this was the desired result or not? There is (or had been last I looked at the source) a defined relationship in the Bourne and Korn shells at least. The parent forks the last command in a pipeline which then becomes the parent of the other commands in the pipeline. Thus the original parent only sees the last command's exit status. This scheme was done to implement the following behavior back around System V.2 in the great Bourne shell "rewrite in C". From the current Solaris man page for Bourne Shell: ... . Each command is run as a separate process; the shell waits for the last command to terminate. The exit status of a pipeline is the exit status of the last command in the pipeline. The addition of the pipefail option to recent ksh93 versions suggests this relation-ship scheme has been altered in those shells. But I do not think it appropriate to generically say there is no defined relationship as if it applies to every shell out there. -- Jon H. LaBadie jcyg AT jgcomp DOT com JG Computing 4455 Province Line Road (609) 252-0159 Princeton, NJ 08540-4322 (609) 683-7220 (fax) -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/