[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Exit status by no-argument `return' for function calls in tr
From: |
Chet Ramey |
Subject: |
Re: [PATCH] Exit status by no-argument `return' for function calls in trap handlers |
Date: |
Sat, 18 Apr 2020 16:12:01 -0400 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 |
On 4/16/20 1:21 PM, Koichi Murase wrote:
> Bash Version: 5.0
> Patch Level: 11
> Release Status: release
>
> Summary:
>
> The behavior of no-argument `return' in trap handlers has been
> changed from Bash 4.4 to follow the description of POSIX. Recently
> this behavior caused problems in my Bash script. I am wondering
> whether this change actually matches with the behavior meant by
> POSIX because the change introduces unreasonable constraints in
> writing shell functions.
>
> For the condition of this special treatment of `return', POSIX says
> ``When return is executed in a trap action''. Here are two possible
> interpretation: (A) `return's specified in the argument string of
> `trap' builtin are affected, or (B) all the `return's in entire
> runtime function-call tree in trap processing are affected. I guess
> that POSIX wanted to provide a way to exit functions that received
> signals without changing the value of `$?'. If that is the case,
> the POSIX should have meant (A). However, the current Bash
> implementation behaves as if it follows the interpretation (B).
The POSIX wording seems straightforward and implies (B). The `action'
is a string that is defined to behave as if it were the argument to
`eval', so it can be an arbitrary command, which makes (A) unlikely.
You could always ask the austin-group list for an interpretation, or
send me something that I could forward to the list for you.
> If all the `return's in the entire function-call tree are affected
> in trap processing as in the interpretation (B), one cannot reliably
> use no-argument `return' to return the last-command exit status. To
> avoid the problem, one has to always write the exit status
> explicitly as `return $?', and there is no use case for no-argument
> `return' at all.
That's an unreasonable statement, throwing out all uses of return without
an argument because of how it behaves while running a trap.
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU chet@case.edu http://tiswww.cwru.edu/~chet/