Procurando averiguar o porquê quando faço algo como;
[ ${debug:=0} -gt 0 ] && set -x || set +x
independentemente da condicional set -x
estar habilitada. O problema é que não consigo usar ${debug}
o set +x
IF debug=1
primeiro.
Caso de teste:
dtest(){ [ "${d:=0}" -gt 0 ] && set -x || set +x; var="abc"; echo "${var}"; }
d=0;dtest
d=1;dtest
d=0;dtest
Não tenho certeza se isso foi perguntado, talvez eu não tenha certeza do palavreado a ser usado.
Você deve redefinir o xtrace na função.
Ou use um subshell:
Isso funciona bem para mim.
set -x
está desabilitado para começar, e comd=0
ele não é definido:Aqui, está definido no meio da função, os dois últimos comandos são impressos no trace:
Aqui,
set -x
está em vigor a partir da última execução da função e é desabilitado no meio da função. O rastreamento não é impresso para os dois últimos comandos, após asset +x
execuções.Se você quiser desabilitar o rastreamento incondicionalmente no final da função, você terá que adicionar uma chamada para
set +x
.Alternativamente, para que a alteração tenha efeito apenas dentro da função, você pode usar
local -
(nas versões atuais do Bash) no início da função ou salvar o valor de$-
manualmente antes de fazer alterações e definir/redefinir o rastreamento com base no valor salvo no fim. Executar a função em um subshell teria um efeito semelhante, mas, nesse caso, quaisquer alterações nas variáveis da função também não seriam visíveis fora dele.