diff options
-rw-r--r-- | bin/sh/eval.c | 5 | ||||
-rw-r--r-- | tools/regression/bin/sh/builtins/command9.0 | 14 |
2 files changed, 17 insertions, 2 deletions
diff --git a/bin/sh/eval.c b/bin/sh/eval.c index c0a7601..b1de306 100644 --- a/bin/sh/eval.c +++ b/bin/sh/eval.c @@ -914,6 +914,9 @@ cmddone: backcmd->nleft = memout.nextc - memout.buf; memout.buf = NULL; } + if (cmdentry.u.index != EXECCMD && + (e == -1 || e == EXERROR || e == EXEXEC)) + popredir(); if (e != -1) { if ((e != EXERROR && e != EXEXEC) || cmdentry.special) @@ -922,8 +925,6 @@ cmddone: if (flags != EV_BACKCMD) FORCEINTON; } - if (cmdentry.u.index != EXECCMD) - popredir(); } else { #ifdef DEBUG trputs("normal command: "); trargs(argv); diff --git a/tools/regression/bin/sh/builtins/command9.0 b/tools/regression/bin/sh/builtins/command9.0 new file mode 100644 index 0000000..212e52a --- /dev/null +++ b/tools/regression/bin/sh/builtins/command9.0 @@ -0,0 +1,14 @@ +# $FreeBSD$ + +failures=0 + +check() { + if ! eval "[ $* ]"; then + echo "Failed: $*" + : $((failures += 1)) + fi +} + +check '"$({ command eval shift x 2>/dev/null; } >/dev/null; echo hi)" = hi' + +exit $((failures > 0)) |