Debug em Shell Scripts
Muitas vezes queremos verificar se um determinado shell script está funcionando normalmente, ou queremos resolver algum
bug estranho.
Para isso basta incluir os seguintes parâmetros ao
bash, na 1ª linha do shell script:
#!/bin/bash -vx
Onde:
- v :: Mostra os comandos à medida que são lidos pelo bash.
- x :: Expande os resultados dos comandos e variáveis (muito útil quando o shell script possui variáveis numéricas e laços de repetição, por exemplo).
Exemplo: Código fonte
#!/bin/bash -vx
echo
read -p "Digite uma palavra: " PAL1
echo
echo "$PAL1"
echo
read -p "Digite outra palavra: " PAL2
echo
echo "$PAL2"
echo
NUMB=0
for cont in $(seq 1 1 10)
do
NUMB=$(($NUMB+1))
echo "$NUMB"
done
echo
Resultado normal:
Digite uma palavra:
GNU
GNU
Digite outra palavra:
Linux
Linux
1
2
3
4
5
6
7
8
9
10
Resultado com "debug" ativado:
#!/bin/bash -vx
echo
+ echo
read -p "Digite uma palavra: " PAL1
+ read -p 'Digite uma palavra: ' PAL1
Digite uma palavra: GNU
echo
+ echo
echo "$PAL1"
+ echo GNU
GNU
echo
+ echo
read -p "Digite outra palavra: " PAL2
+ read -p 'Digite outra palavra: ' PAL2
Digite outra palavra: Linux
echo
+ echo
echo "$PAL2"
+ echo Linux
Linux
echo
+ echo
NUMB=0
+ NUMB=0
for cont in $(seq 1 1 10)
do
NUMB=$(($NUMB+1))
echo "$NUMB"
done
seq 1 1 10)
seq 1 1 10
++ seq 1 1 10
+ for cont in '$(seq 1 1 10)'
+ NUMB=1
+ echo 1
1
+ for cont in '$(seq 1 1 10)'
+ NUMB=2
+ echo 2
2
+ for cont in '$(seq 1 1 10)'
+ NUMB=3
+ echo 3
3
+ for cont in '$(seq 1 1 10)'
+ NUMB=4
+ echo 4
4
+ for cont in '$(seq 1 1 10)'
+ NUMB=5
+ echo 5
5
+ for cont in '$(seq 1 1 10)'
+ NUMB=6
+ echo 6
6
+ for cont in '$(seq 1 1 10)'
+ NUMB=7
+ echo 7
7
+ for cont in '$(seq 1 1 10)'
+ NUMB=8
+ echo 8
8
+ for cont in '$(seq 1 1 10)'
+ NUMB=9
+ echo 9
9
+ for cont in '$(seq 1 1 10)'
+ NUMB=10
+ echo 10
10
echo
+ echo
Para ativar este efeito na própria linha de comando:
set -vx
Para desativar:
set +vx
Para mais informações, consulte:
man bash
Outras dicas deste autor
ACL - Implementando permissões de arquivos e diretórios personalizados
iconv - Convertendo a codificação de arquivos no GNU/Linux
eject - Comando para abrir/fechar drive de disco
MEncoder - Conversão de vídeos pela linha de comando
Acompanhando progresso na cópia de arquivos
Leitura recomendada
if/then/elif/else - Escrevendo de outra maneira em bash
Solucionando problemas com o xmessage no wine
Todos os logs com o multitail
Canivete suíço em bash
FFmpeg: screencast do desktop gravando duas fontes de áudio simultaneamente
Comentários