delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/01/12/23:53:57

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
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 <jcyg AT jgcomp DOT com>
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
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/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019