diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-09-07 02:23:51 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-09-07 02:25:52 +0200 |
commit | e53c7dbafc78948e5c0d8d8ccb0bdcd9f936c62e (patch) | |
tree | 909286fc381d47fba921621afb809a84997815fc /shell | |
parent | f415e21a7dce1d4f4b760fddfaba85c551681e11 (diff) | |
download | busybox-w32-e53c7dbafc78948e5c0d8d8ccb0bdcd9f936c62e.tar.gz busybox-w32-e53c7dbafc78948e5c0d8d8ccb0bdcd9f936c62e.tar.bz2 busybox-w32-e53c7dbafc78948e5c0d8d8ccb0bdcd9f936c62e.zip |
hush: fix set -n to act immediately, not just after run_list()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rwxr-xr-x | shell/ash_test/ash-misc/exitcode_trap7.tests | 2 | ||||
-rw-r--r-- | shell/hush.c | 8 | ||||
-rw-r--r-- | shell/hush_test/hush-misc/exitcode_trap7.right | 2 | ||||
-rwxr-xr-x | shell/hush_test/hush-misc/exitcode_trap7.tests | 7 | ||||
-rw-r--r-- | shell/hush_test/hush-misc/set-n1.right | 3 | ||||
-rwxr-xr-x | shell/hush_test/hush-misc/set-n1.tests | 2 |
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 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 @@ | |||
1 | $THIS_SH -c ' | 1 | $THIS_SH -c ' |
2 | cleanup() { set +e; false; } | 2 | cleanup() { set +e; false; } |
3 | set -eu | 3 | set -e |
4 | trap cleanup EXIT | 4 | trap cleanup EXIT |
5 | echo Start | 5 | echo Start |
6 | ' | 6 | ' |
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) | |||
9898 | #if ENABLE_HUSH_LOOPS | 9898 | #if ENABLE_HUSH_LOOPS |
9899 | G.flag_break_continue = 0; | 9899 | G.flag_break_continue = 0; |
9900 | #endif | 9900 | #endif |
9901 | rcode = r = run_pipe(pi); /* NB: rcode is a smalluint, r is int */ | 9901 | rcode = r = G.o_opt[OPT_O_NOEXEC] ? 0 : run_pipe(pi); |
9902 | /* NB: rcode is a smalluint, r is int */ | ||
9902 | if (r != -1) { | 9903 | if (r != -1) { |
9903 | /* We ran a builtin, function, or group. | 9904 | /* We ran a builtin, function, or group. |
9904 | * rcode is already known | 9905 | * rcode is already known |
@@ -10137,7 +10138,10 @@ static int set_mode(int state, char mode, const char *o_opt) | |||
10137 | int idx; | 10138 | int idx; |
10138 | switch (mode) { | 10139 | switch (mode) { |
10139 | case 'n': | 10140 | case 'n': |
10140 | G.o_opt[OPT_O_NOEXEC] = state; | 10141 | /* set -n has no effect in interactive shell */ |
10142 | /* Try: while set -n; do echo $-; done */ | ||
10143 | if (!G_interactive_fd) | ||
10144 | G.o_opt[OPT_O_NOEXEC] = state; | ||
10141 | break; | 10145 | break; |
10142 | case 'x': | 10146 | case 'x': |
10143 | IF_HUSH_MODE_X(G_x_mode = state;) | 10147 | 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 @@ | |||
1 | Start | ||
2 | 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 @@ | |||
1 | $THIS_SH -c ' | ||
2 | cleanup() { set +e; false; } | ||
3 | set -e | ||
4 | trap cleanup EXIT | ||
5 | echo Start | ||
6 | ' | ||
7 | 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 @@ | |||
1 | set -n stops in -c? | ||
2 | YES | ||
3 | 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 @@ | |||
1 | $THIS_SH -c "echo 'set -n stops in -c?'; set -n; echo NO" && echo YES | ||
2 | echo Ok:$? | ||