diff --git a/function.c b/function.c index 8d8f198f..92a750dc 100644 --- a/function.c +++ b/function.c @@ -1469,6 +1469,9 @@ shell_completed (int exit_code, int exit_sig) else shell_function_completed = 1; + if (exit_code == 0 && exit_sig > 0) + exit_code = 128 + exit_sig; + sprintf (buf, "%d", exit_code); define_variable_cname (".SHELLSTATUS", buf, o_override, 0); } diff --git a/tests/scripts/functions/shell b/tests/scripts/functions/shell index 24e94ab8..6e446084 100644 --- a/tests/scripts/functions/shell +++ b/tests/scripts/functions/shell @@ -22,9 +22,16 @@ $(shell exit 0) OK := $(.SHELLSTATUS) $(shell exit 1) BAD := $(.SHELLSTATUS) +$(shell kill -2 $$$$) +SIG := $(.SHELLSTATUS) all: ; @echo PRE=$(PRE) OK=$(OK) BAD=$(BAD) ','','PRE= OK=0 BAD=1'); +run_make_test('.PHONY: all +$(shell kill -2 $$$$) +SIG := $(.SHELLSTATUS) +all: ; @echo SIG=$(SIG) + ','','SIG=130'); # Test unescaped comment characters in shells. Savannah bug #20513 run_make_test(q!