diff --git a/shell/ash_test/ash-misc/exitcode_trap7.tests b/shell/ash_test/ash-misc/exitcode_trap7.tests index 9772a7b8c..f4b0eb544 100755 --- a/shell/ash_test/ash-misc/exitcode_trap7.tests +++ b/shell/ash_test/ash-misc/exitcode_trap7.tests @@ -1,6 +1,6 @@ $THIS_SH -c ' cleanup() { set +e; false; } -set -eu +set -e trap cleanup EXIT echo Start ' diff --git a/shell/hush.c b/shell/hush.c index 27092c12f..5fafa322c 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -9898,7 +9898,8 @@ static int run_list(struct pipe *pi) #if ENABLE_HUSH_LOOPS G.flag_break_continue = 0; #endif - rcode = r = run_pipe(pi); /* NB: rcode is a smalluint, r is int */ + rcode = r = G.o_opt[OPT_O_NOEXEC] ? 0 : run_pipe(pi); + /* NB: rcode is a smalluint, r is int */ if (r != -1) { /* We ran a builtin, function, or group. * rcode is already known @@ -10137,7 +10138,10 @@ static int set_mode(int state, char mode, const char *o_opt) int idx; switch (mode) { case 'n': - G.o_opt[OPT_O_NOEXEC] = state; + /* set -n has no effect in interactive shell */ + /* Try: while set -n; do echo $-; done */ + if (!G_interactive_fd) + G.o_opt[OPT_O_NOEXEC] = state; break; case 'x': IF_HUSH_MODE_X(G_x_mode = state;) diff --git a/shell/hush_test/hush-misc/exitcode_trap7.right b/shell/hush_test/hush-misc/exitcode_trap7.right new file mode 100644 index 000000000..07d66e9d9 --- /dev/null +++ b/shell/hush_test/hush-misc/exitcode_trap7.right @@ -0,0 +1,2 @@ +Start +Ok:0 diff --git a/shell/hush_test/hush-misc/exitcode_trap7.tests b/shell/hush_test/hush-misc/exitcode_trap7.tests new file mode 100755 index 000000000..f4b0eb544 --- /dev/null +++ b/shell/hush_test/hush-misc/exitcode_trap7.tests @@ -0,0 +1,7 @@ +$THIS_SH -c ' +cleanup() { set +e; false; } +set -e +trap cleanup EXIT +echo Start +' +echo Ok:$? diff --git a/shell/hush_test/hush-misc/set-n1.right b/shell/hush_test/hush-misc/set-n1.right new file mode 100644 index 000000000..ac01831a7 --- /dev/null +++ b/shell/hush_test/hush-misc/set-n1.right @@ -0,0 +1,3 @@ +set -n stops in -c? +YES +Ok:0 diff --git a/shell/hush_test/hush-misc/set-n1.tests b/shell/hush_test/hush-misc/set-n1.tests new file mode 100755 index 000000000..90d0f9146 --- /dev/null +++ b/shell/hush_test/hush-misc/set-n1.tests @@ -0,0 +1,2 @@ +$THIS_SH -c "echo 'set -n stops in -c?'; set -n; echo NO" && echo YES +echo Ok:$?