Inline debug (xtrace) em scripts

2

Existe uma maneira de forçar a ativação ou desativação de depuração (xtrace) por linha de comando em scripts?

No Windows Shell ("ms-dos") é um "@" que pode prefixar uma linha de comando, desabilitando a linha a ser mostrada se o eco (digamos, depuração) estiver habilitado (ecoado).

Considere o xtrace em (set -x), mas podemos omitir seu efeito em algumas linhas que prefixam, digamos com "@". Como se:

set -x
@echo Listing...
ls
set +x

Exemplo de saída:

Listing...
+ ls
file1
file2

É algo semelhante em scripts de shell?

    
por Luciano 05.01.2016 / 14:44

1 resposta

6

Não tenho conhecimento de nenhum shell que tenha esse operador. No entanto, com a maioria dos shells (sendo a exceção o ksh), você pode silenciosamente alternar xtrace com:

{
  case $- in
    (*x*) set +x;;
    (*) set -x
  esac
} 2> /dev/null

Então, você pode torná-lo um alias:

alias 'xx={
  case $- in
    (*x*) set +x;;
    (*) set -x
  esac
} 2> /dev/null'

E use como:

set -x
echo traced
xx; echo not traced; xx
echo traced
set +x

Note que, com o bash, você precisa de shopt -s expand_aliases para os aliases serem expandidos em shells não interativos (como em scripts).

    
por 05.01.2016 / 23:22