[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: feature request: new builtin `defer`, scope delayed eval
From: |
Lawrence Velázquez |
Subject: |
Re: feature request: new builtin `defer`, scope delayed eval |
Date: |
Sat, 08 Oct 2022 03:04:12 -0400 |
User-agent: |
Cyrus-JMAP/3.7.0-alpha0-1015-gaf7d526680-fm-20220929.001-gaf7d5266 |
On Sat, Oct 8, 2022, at 2:11 AM, Koichi Murase wrote:
> 2022年10月8日(土) 12:04 Cynthia Coan <cynthia@coan.dev>:
>> [...]
>>
>> Otherwise, I think we can perhaps reword this into two smaller
>> features: "function local trap signals",
>
> The existing RETURN trap is exactly the trap that can be used to clean
> up resources local to functions and is already ``function-local''
> unless the user changes its behavior by setting `declare -ft', `set
> -T', or `shopt -s extdebug'. One thing to note is that the RETURN trap
> should be cleaned up inside the RETURN trap itself by running `trap -
> RETURN', or otherwise the RETURN trap is erroneously considered by
> Bash to be set for the caller function.
The latter behavior is why I didn't describe RETURN as function-local
in my earlier message, but I forgot the workaround of unsetting
the trap from within itself. Nice.
>> and "options to safely
>> append/prepend to a trap" (for some definition of 'safe', perhaps this
>> just means separating by ';'?
>
> Currently, there is no way to register multiple handlers to a trap in
> a safe way, but if you can accept the approach by `;' or newline, you
> can just do it by getting the current trap string with `trap -p
> RETURN' and then overwrite the trap with the adjusted trap string.
Another strategy is to construct the complete trap string before
setting the trap, using whichever concatenation methods are preferred:
f() {
local trapcmds=cleanup
if something; then
trapcmds+='; more_cleanup'
else
trapcmds+='; so_fresh_and_so_clean'
fi
trap "$trapcmds; trap - RETURN" RETURN
rest_of_function
}
--
vq
- Re: feature request: new builtin `defer`, scope delayed eval, (continued)
- Re: feature request: new builtin `defer`, scope delayed eval, Koichi Murase, 2022/10/08
- Re: feature request: new builtin `defer`, scope delayed eval, Cynthia Coan, 2022/10/08
- Re: feature request: new builtin `defer`, scope delayed eval, Koichi Murase, 2022/10/08
- Re: feature request: new builtin `defer`, scope delayed eval, Koichi Murase, 2022/10/08
- Re: feature request: new builtin `defer`, scope delayed eval, Cynthia Coan, 2022/10/08
- Re: feature request: new builtin `defer`, scope delayed eval, Koichi Murase, 2022/10/08
- Re: feature request: new builtin `defer`, scope delayed eval, Cynthia Coan, 2022/10/08
- Re: feature request: new builtin `defer`, scope delayed eval,
Lawrence Velázquez <=
- Re: feature request: new builtin `defer`, scope delayed eval, Koichi Murase, 2022/10/08