hush: implement "return NUM in trap sets $? after trap"

function                                             old     new   delta
builtin_return                                        47      67     +20
check_and_run_traps                                  243     259     +16
run_pipe                                            1583    1597     +14
hush_main                                           1076    1086     +10
run_list                                            1054    1055      +1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 5/0 up/down: 61/0)               Total: 61 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2020-02-20 16:37:59 +01:00
parent d5bfe26c45
commit bb095f4838
13 changed files with 98 additions and 1 deletions

View File

@@ -0,0 +1,2 @@
TERM
42:42

View File

@@ -0,0 +1,9 @@
# "return" in trap should not use last command's exitcode,
# but exitcode on entering the trap.
trap "echo TERM;return" term
f() {
(sleep 1; kill $$) &
until (exit 42) do (exit 42); done
}
f
echo 42:$?

View File

@@ -0,0 +1,2 @@
TERM
11:11

View File

@@ -0,0 +1,8 @@
# "return" in trap sets $? after trap
trap "echo TERM;return 11" term
f() {
(sleep 1; kill $$) &
until (exit 42) do (exit 42); done
}
f
echo 11:$?

View File

@@ -0,0 +1,3 @@
TERM
Nested
Zero:0

View File

@@ -0,0 +1,10 @@
# "return" in trap sets $? after trap...
# ...but not a nested one!
g() { echo Nested; return 22; }
trap "echo TERM;false;g" term
f() {
(kill $$) &
sleep 1
}
f
echo Zero:$?