Mail Archives: cygwin/2003/01/13/00:23:44
Jon,
Well, Cygwin does not include Bourne shell, it has BASH, ash and zsh, but
it does appear that the status returned by a parenthesized pipeline under
BASH is that of the last command in that pipeline.
Strictly speaking, that's not at odds with the first part of what I said,
which is that the parent - child process relationship between processes in
a pipeline is not specified.
So this leaves one puzzle: Why is it that Rolf is getting different results
for this command between Linux and Cygwin?
(false | true) && echo true || echo false
Rolf, which shells are you using on Linux and Cygwin?
Randall Schulz
At 20:53 2003-01-12, Jon LaBadie wrote:
>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
--
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 -