bash & using uma variável para decidir quando usar 'set'? [fechadas]

0

Olhando para averiguar porque quando faço algo como

[ ${debug:=0} -gt 0 ] && set -x || set +x

independentemente de o% condicionalset -x estar ativado. O problema é que não consigo usar ${debug} to 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 para usar. Agradecemos antecipadamente.

    
por jas- 06.10.2018 / 04:43

2 respostas

0

Você deve redefinir o xtrace na função.

dtest(){
  [ "${d:=0}" -gt 0 ] && set -x
  var="abc"
  echo "${var}"
  set +x
}
d=0;dtest
d=1;dtest
d=0;dtest

Ou use um subnível:

dtest(){
  [ "${d:=0}" -gt 0 ] && set -x || set +x
  var="abc"
  echo "${var}"
}
d=0;(dtest)
d=1;(dtest)
d=0;(dtest)
    
por 06.10.2018 / 09:22
0

Isso funciona bem para mim.

set -x está desativado para começar e, com d=0 , não é definido:

$ dtest(){ [ "${d:=0}" -gt 0 ] && set -x || set +x; var="abc"; echo "${var}"; }
$ d=0;dtest
abc

Aqui, é colocado no meio da função, os dois últimos comandos impressos no traço:

$ d=1;dtest
+ var=abc
+ echo abc
abc

Aqui, set -x entra em vigor a partir da última execução da função e fica desativado no meio da função. O rastreio não é impresso para os dois últimos comandos, depois que set +x é executado.

$ d=0;dtest
+ d=0
+ dtest
+ '[' 0 -gt 0 ']'
+ set +x
abc

Se você quiser desabilitar o rastreamento incondicionalmente no final da função, você tem que adicionar uma chamada para set +x .

Como alternativa, para que a alteração tenha efeito somente 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 final. A execução da função em um subshell teria um efeito semelhante, mas, nesse caso, qualquer alteração nas variáveis da função também não seria visível fora dela.

    
por 06.10.2018 / 10:38