From: "Eduardo A. Bustamante López" <dualbus@gmail.com>
To: Peter Stephenson <p.stephenson@samsung.com>
Cc: zsh-workers@zsh.org
Subject: Re: Zsh does not follow POSIX when return is called during the action of a trap
Date: Wed, 12 Mar 2014 10:47:14 -0700 [thread overview]
Message-ID: <20140312174714.GA13516@dualbus.me> (raw)
In-Reply-To: <20140312170309.48ea7444@pwslap01u.europe.root.pri>
On Wed, Mar 12, 2014 at 05:03:09PM +0000, Peter Stephenson wrote:
> On Wed, 12 Mar 2014 09:52:10 -0700
> Bart Schaefer <schaefer@brasslantern.com> wrote:
> > Have you tried this with the POSIX_TRAPS option set?
> >
> > Zsh does not in general conform to POSIX at all unless you run it with
> > the appropriate compatibility settings.
I see. Well, I now ran the code with 'emulate sh' (thanks Peter, for
the suggestion).
These are the results:
| 12 zsh: 2
| 988 zsh: 3
| zsh 5.0.5-dev-0 (x86_64-unknown-linux-gnu)
For this new code:
| code='
| emulate sh
|
| trap "(exit 2); return" USR1
| f() {
| { echo; kill -USR1 $$; } | exit 3
| return 5
| }
|
| (exit 7); f
| '
|
| shells=(
| zsh
| )
|
| for attempt in {1..1000}; do
| for shell in "${shells[@]}"; do
| printf '%s: %s\n' "$shell" "$($shell -c "$code"; echo $?)"
| done
| done | sort | uniq -c
|
| zsh --version
> However, I'm trying to work out what happens with the case
>
> | trap '(exit BEFORE-RETURN); return EXPLICIT-RETURN-VALUE' SIGNAL
> |
> | fn() {
> | (exit BEFORE-ACTION); -block here waiting for signal-
> | }
>
> Should this exit with EXPLICIT-RETURN_VALUE or BEFORE-ACTION? The
> latter is easier to implement but my guess (without ploughing through
> the standard) is EXPLICIT-RETURN-VALUE is right here.
>
> pws
>
Ah, I see. I tested with this:
| code='
| emulate sh
|
| trap "(exit 2); return 9" USR1
| f() {
| { echo; kill -USR1 $$; } | exit 3
| return 5
| }
|
| (exit 7); f
| '
|
| shells=(
| zsh
| )
|
| for attempt in {1..1000}; do
| for shell in "${shells[@]}"; do
| printf '%s: %s\n' "$shell" "$($shell -c "$code"; echo $?)"
| done
| done | sort | uniq -c
|
| zsh --version
And got:
| 991 zsh: 3
| 9 zsh: 9
| zsh 5.0.5-dev-0 (x86_64-unknown-linux-gnu)
Which is kind of wrong, since it should always be 9, but according to
the results, it's mostly 3. POSIX states:
| The value of the special parameter '?' shall be set to n, an unsigned
| decimal integer, or to the exit status of the last command executed if n is
| not specified. If the value of n is greater than 255, the results are
| undefined. When return is executed in a trap action, the last command is
| considered to be the command that executed immediately preceding the trap
| action.
So, the result should be 9 ("'?' shall be set to n [...] or the exit
status of the last command [...]"). Because in this case 'n' is set.
--
Eduardo Alan Bustamante López
next prev parent reply other threads:[~2014-03-12 17:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-12 15:36 Eduardo A. Bustamante López
2014-03-12 16:52 ` Bart Schaefer
2014-03-12 17:03 ` Peter Stephenson
2014-03-12 17:47 ` Eduardo A. Bustamante López [this message]
2014-03-12 17:49 ` Chet Ramey
2014-03-12 18:23 ` Peter Stephenson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140312174714.GA13516@dualbus.me \
--to=dualbus@gmail.com \
--cc=p.stephenson@samsung.com \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).