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:
@ -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;)
|
||||
|
Reference in New Issue
Block a user