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.
pws
Messages sorted by:
Reverse Date,
Date,
Thread,
Author