On Mon, Mar 04, 2019 at 03:36:33PM +0100, SZEDER Gábor wrote:
> On Tue, Feb 26, 2019 at 04:01:01PM -0500, Jeff King wrote:
> > > + { set +x ; } 2>/dev/null 4>/dev/null
> >
> > Ah, this is the magic. Doing:
> >
> > set +x 2>/dev/null
> >
> > will still show it, but doing the redirection in a wrapping block means
> > that it is applied before the command inside the block is run. Clever.
>
> Yeah, clever, but unfortunately (and to me suprisingly) unportable:
>
> $ ksh
> $ set -x
> $ echo foo
> + echo foo
> foo
> $ set +x
> $
>
> It doesn't show 'set +x', how convenient! :)
> However:
>
> $ set -x
> $ echo foo 2>/dev/null
> + echo foo
> + 2> /dev/null
> foo
> $ { set +x; } 2>/dev/null
> + 2> /dev/null
> $
Hmph. Good find. As you note, this is already a problem with "-x". I'm
not sure if there's an easy way to fix this. We can't wrap it in a
conditional function easily. I guess we could do something like:
if test "$SOMEHOW_WE_DETECT_KSH"
then
eval "set -x; run_the_test; set +x"
else
eval "set -x; run_the_test; { set +x; } 2>/dev/null"
fi
but I wonder if just ignoring it is a viable option here. We're talking
about debugging output from the test suite, after all. As long as the
test suite still _works_ on those shells, and as long as there are no
developers on ksh-primary systems who can't bear to use another
$TEST_SHELL_PATH, it's really not hurting anybody. The worst case is
somebody reporting a test failure on NetBSD might have a slightly more
verbose "-x" output.
-Peff