Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Strange function/pipestatus behavior, maybe a scope bug?

On Wed, 23 Oct 2013 22:15:48 -0700
Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> It therefore suffices to lift the pipestatus-updating code out of the
> update_job() routine and call it from printjob() just before the Job
> object is deleted.
> There's a minor redundancy still here in that update_job() sometimes
> calls printjob() which will result in storepipestats() being called
> twice; but update_job() needs the return status, sometimes has a
> different idea of whether the job is in the foreground, and doesn't
> always call printjob(), so I don't see any obvious way around this.

This doesn't seem serious.

> One remaining bug which is neither new to this nor fixed by it:  The
> very first time one runs a pipeline ending in a shell function,
> something goes wrong and the whole thing is treated as if it is in
> the background.  Here's zsh-5.0.2-248-ge05261f without my patch:
> % true | false | true | false | (){ true }; echo $pipestatus
> [1]  + done       true | 
>        exit 1     false | 
>        done       true | 
>        running    false
> 1
> % 

Sounds like a race setting up the job, maybe related to the fact that
"thisjob" isn't initialised in a particularly obvious place when the
code is executing within the shell.  Are you seeing this with any
shell function, or just anonymous functions?

> Oh, one other bug which I don't believe is new:  the PIPEFAIL option
> doesn't work right if the last command is a builtin.  Maybe that
> test should be moved into storepipestats() as well, in which case
> the redundancy I mentioned above might also be eliminated.

Are you saying that $pipestatus is correct but the overall status is
wrong if you have something like "true | true | true" or "true | true |
false"?  It certainly sounds like they ought to run at the same point.
The last command ought to be the easy one --- that's where the status
has always come from, so if those two pipelines are giving different
answers with and without PIPEFAIL something is definitely odd.


Messages sorted by: Reverse Date, Date, Thread, Author