hush: fix set -n to act immediately, not just after run_list()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
f415e21a7d
commit
e53c7dbafc
@ -1,6 +1,6 @@
|
|||||||
$THIS_SH -c '
|
$THIS_SH -c '
|
||||||
cleanup() { set +e; false; }
|
cleanup() { set +e; false; }
|
||||||
set -eu
|
set -e
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
echo Start
|
echo Start
|
||||||
'
|
'
|
||||||
|
@ -9898,7 +9898,8 @@ static int run_list(struct pipe *pi)
|
|||||||
#if ENABLE_HUSH_LOOPS
|
#if ENABLE_HUSH_LOOPS
|
||||||
G.flag_break_continue = 0;
|
G.flag_break_continue = 0;
|
||||||
#endif
|
#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) {
|
if (r != -1) {
|
||||||
/* We ran a builtin, function, or group.
|
/* We ran a builtin, function, or group.
|
||||||
* rcode is already known
|
* rcode is already known
|
||||||
@ -10137,7 +10138,10 @@ static int set_mode(int state, char mode, const char *o_opt)
|
|||||||
int idx;
|
int idx;
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 'n':
|
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;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
IF_HUSH_MODE_X(G_x_mode = state;)
|
IF_HUSH_MODE_X(G_x_mode = state;)
|
||||||
|
2
shell/hush_test/hush-misc/exitcode_trap7.right
Normal file
2
shell/hush_test/hush-misc/exitcode_trap7.right
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Start
|
||||||
|
Ok:0
|
7
shell/hush_test/hush-misc/exitcode_trap7.tests
Executable file
7
shell/hush_test/hush-misc/exitcode_trap7.tests
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
$THIS_SH -c '
|
||||||
|
cleanup() { set +e; false; }
|
||||||
|
set -e
|
||||||
|
trap cleanup EXIT
|
||||||
|
echo Start
|
||||||
|
'
|
||||||
|
echo Ok:$?
|
3
shell/hush_test/hush-misc/set-n1.right
Normal file
3
shell/hush_test/hush-misc/set-n1.right
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
set -n stops in -c?
|
||||||
|
YES
|
||||||
|
Ok:0
|
2
shell/hush_test/hush-misc/set-n1.tests
Executable file
2
shell/hush_test/hush-misc/set-n1.tests
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
$THIS_SH -c "echo 'set -n stops in -c?'; set -n; echo NO" && echo YES
|
||||||
|
echo Ok:$?
|
Loading…
x
Reference in New Issue
Block a user