De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Debug no bash

Colaboração: Fernando M. Roxo da Motta

Data de Publicação: 19 de Abril de 2001

Por vezes um script é muito grande e nos interessa fazer este "trace" apenas em um trecho do programa. Como fazê-lo? Coloque no início do trecho uma instrução:

set -x

Desta linha em diante o "trace" será ligado. Para desligar o "trace" mais adiante para evitar listar partes sem importância, use:

set +x

Veja que por vezes nós sabemos que o "problema" só ocorre quando alguma variável assume um determinado valor. Neste caso podemos ligar o "trace" condicionalmente:

if [ $VARIAVEL = valor ]; then
 set -x
fi
{trecho a debugar}
set +x

Como se pode ver o "trace" pode ser desligado mesmo que ele não esteja ligado.

Esta forma de listar o script, durante a execução, vai listar o comando após a substituição das variáveis. Como identificar que variável tem que valor? Podemos usar a opção "-v" para listar as linhas durante a leitura. Na verdade eu prefiro usar uma combinação das duas opções:

set -xv
{trecho a "debugar"}
set +xv

Da mesma forma que antes o "+" desliga a opção.

Um último par de dicas. Se um script "liga" o "debug", apenas os "scripts" rodados com o comando "." terão o "debug" ligado. Para evitar que fique algum "debug" ligado quando se reutiliza o ambiente (através do comando "." ) é interessante colocar no final do script um desligar geral de "debug", mesmo que o "debug" não tenha sido ligado :

#
# Desliga "debug" se tiver sido ligado
set +xv
# Fim do script....


Veja a relação completa dos artigos de Fernando M. Roxo da Motta