xtrace output vai para stderr, então você pode redirecionar stderr para /dev/null :
ikwtd() {
echo do stuff
} 2> /dev/null
Se você ainda quiser ver os erros dos comandos executados dentro das funções, você pode fazer
ikwtd() (
{ set +x; } 2> /dev/null # silently disable xtrace
echo do stuff
)
Observe o uso de (...) em vez de {...} para fornecer um escopo local para essa função por meio de um subshell. bash , já que a versão 4.4 agora suporta local - como no shell Almquist para tornar opções locais para a função (semelhante a set -o localoptions em zsh ), então você pode evitar a subshell fazendo:
ikwtd() {
{ local -; set +x; } 2> /dev/null # silently disable xtrace
echo do stuff
}
Uma alternativa para bash 4.0 a 4.3 seria usar a variável $BASH_XTRACEFD e ter um descritor de arquivo dedicado aberto em /dev/null para isso:
exec 9> /dev/null
set -x
ikwtd() {
{ local BASH_XTRACEFD=9; } 2> /dev/null # silently disable xtrace
echo do stuff
}
Como bash não tem a capacidade de marcar um fd com o sinalizador close-on-exec , isso tem o efeito colateral de vazar o fd para outros comandos.
Veja também este locvar.sh que contém algumas funções para implementar o escopo local para variáveis e funções em scripts POSIX e também fornece com trace_fn e untrace_fn funções para torná-las xtrace d ou não.