On 2/10/25 7:25 PM, Rob Landley wrote:
I don't understand how to reconcile the behavior of all three of these in debian's bash 5.2.15(1):

Trap actions have no "return value." POSIX says:

"The value of "$?" after the trap action completes shall be the value it
had before the trap action was executed."


$ bash -c $'trap \'echo hello;false\' USR1 && kill -s USR1 $$ && echo here $?'
hello
here 0
$ bash -c $'trap \'echo hello;false\' USR1 && kill -s USR1 9876543; echo here $?'
bash: line 1: kill: (9876543) - No such process
here 1
$ bash -c $'trap \'echo hello;false\' USR1 && kill -s USR1 $$ 9876543; echo here $?'
bash: line 1: kill: (9876543) - No such process
hello
here 0

1) The previous statement returns 0 but the trap handler returns 1, so the next statement sees zero.

Executing a trap action doesn't change $?.

2) The previous statement returns 1, the trap handler doesn't run, so the next statement sees 1.

As if the trap were not there at all.

3) The previous statement returns 1 and the trap handler returns 1, so the next statement sees zero...?

The AND-OR list returns 0, since the trap command succeeds, the kill
command runs, and kill returns 0 if it sends at least one signal
successfully. That is documented:

"kill returns true if at least one signal was successfully  sent,
 or false if an error occurs or an invalid option is encountered."

--
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    c...@case.edu    http://tiswww.cwru.edu/~chet/
_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to