From 204c7fb2293f67f6277f917e854188f5540e6955 Mon Sep 17 00:00:00 2001 From: Rostislav Skudnov Date: Fri, 16 Sep 2016 19:04:02 +0000 Subject: [PATCH] ash: exit after subshell error when errexit option is set When "set -e" option is on, shell must exit when any command fails, including compound commands of the form (compound-list) executed in a subshell. Bash and dash shells have this behaviour. Also add a corresponding testcase. Signed-off-by: Rostislav Skudnov Signed-off-by: Denys Vlasenko --- shell/ash.c | 2 ++ shell/ash_test/ash-misc/errexit1.right | 1 + shell/ash_test/ash-misc/errexit1.tests | 5 +++++ 3 files changed, 8 insertions(+) create mode 100644 shell/ash_test/ash-misc/errexit1.right create mode 100755 shell/ash_test/ash-misc/errexit1.tests diff --git a/shell/ash.c b/shell/ash.c index bffb4a245..a885514d3 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -8408,6 +8408,8 @@ evaltree(union node *n, int flags) evalfn = evalloop; goto calleval; case NSUBSHELL: + evalfn = evalsubshell; + goto checkexit; case NBACKGND: evalfn = evalsubshell; goto calleval; diff --git a/shell/ash_test/ash-misc/errexit1.right b/shell/ash_test/ash-misc/errexit1.right new file mode 100644 index 000000000..d86bac9de --- /dev/null +++ b/shell/ash_test/ash-misc/errexit1.right @@ -0,0 +1 @@ +OK diff --git a/shell/ash_test/ash-misc/errexit1.tests b/shell/ash_test/ash-misc/errexit1.tests new file mode 100755 index 000000000..7b4a15634 --- /dev/null +++ b/shell/ash_test/ash-misc/errexit1.tests @@ -0,0 +1,5 @@ +set -e +(true) +echo OK +(false) +echo FAIL