summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xshell/ash_test/ash-misc/exitcode_trap7.tests2
-rw-r--r--shell/hush.c8
-rw-r--r--shell/hush_test/hush-misc/exitcode_trap7.right2
-rwxr-xr-xshell/hush_test/hush-misc/exitcode_trap7.tests7
-rw-r--r--shell/hush_test/hush-misc/set-n1.right3
-rwxr-xr-xshell/hush_test/hush-misc/set-n1.tests2
6 files changed, 21 insertions, 3 deletions
diff --git a/shell/ash_test/ash-misc/exitcode_trap7.tests b/shell/ash_test/ash-misc/exitcode_trap7.tests
index 9772a7b..f4b0eb5 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 27092c1..5fafa32 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 0000000..07d66e9
--- /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 0000000..f4b0eb5
--- /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 0000000..ac01831
--- /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 0000000..90d0f91
--- /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:$?