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 '
|
||||
cleanup() { set +e; false; }
|
||||
set -eu
|
||||
set -e
|
||||
trap cleanup EXIT
|
||||
echo Start
|
||||
'
|
||||
|
@ -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,6 +10138,9 @@ static int set_mode(int state, char mode, const char *o_opt)
|
||||
int idx;
|
||||
switch (mode) {
|
||||
case 'n':
|
||||
/* 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':
|
||||
|
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…
Reference in New Issue
Block a user