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 $ Apparently ksh, ksh93 and mksh show not only the executed commands but any redirections as well. It's already visible when running our tests with ksh and '-x': $ ksh ./t9999-test.sh -x Initialized empty Git repository in /home/szeder/src/git/t/trash directory.t9999-test/.git/ expecting success: true + true + 2> /dev/null ok 1 - first # passed all 1 test(s) 1..1 NetBSD's sh: # set -x # echo foo + echo foo foo # echo foo 2>/dev/null + echo foo 2>/dev/null foo # { set +x; } 2>/dev/null + using redirections: 2>/dev/null do