Inicie seu script bash com bash -x ./script.sh
ou adicione seu script set -x
para ver a saída de depuração.
Adicional com bash
4.1 ou posterior:
Se você deseja gravar a saída de depuração em um arquivo separado, adicione isso ao seu script:
exec 5> debug_output.txt
BASH_XTRACEFD="5"
Consulte: https://stackoverflow.com/a/25593226/3776858
Se você quiser ver os números das linhas, adicione isto:
PS4='$LINENO: '
Se você tiver acesso ao
logger
comando, poderá usá-lo para gravar a saída de depuração via syslog com carimbo de data / hora, nome do script e número da linha:
#!/bin/bash
exec 5> >(logger -t $0)
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x
# Place your code here
Você pode usar a opção -p
de logger
comando para definir um recurso e um nível individuais para gravar a saída via syslog local em seu próprio arquivo de log.
BASH_XTRACEFD="5"
bash, grava a saída de rastreamento gerada quandoset -x
ativada no descritor de arquivo 5.exec 5> >(logger -t $0)
redireciona a saída do descritor de arquivo 5 para ologger
comando.Usando
set -x
Eu sempre uso
set -x
eset +x
. Você pode agrupar áreas nas quais deseja ver o que está acontecendo com elas para ativar / desativar a verbosidade.log4bash
Além disso, se você fez um trabalho de desenvolvimento e está familiarizado com o estilo dos registradores que usam os nomes log4j, log4perl etc., convém usar o log4bash .
excertoA partir daí, você pode fazer coisas assim nos seus scripts do Bash:
Resultando neste tipo de saída:
log4sh
Se você precisar de algo mais portátil, também há os mais antigos
log4sh
. Trabalhos similares alog4bash
, disponíveis aqui:fonte
alias say="spd-say"
no meu .bashrc, que imita osay
comando de outras distros ou OS X.Há um depurador bash, o bashdb , que é um pacote instalável em muitas distribuições. Ele usa o modo de depuração estendido interno do bash (
shopt -s extdebug
). Parece muito com gdb; aqui está uma sessão de amostra para dar um sabor:Como no gdb, a instrução é mostrada imediatamente antes de ser executada. Portanto, podemos examinar variáveis para ver o que a declaração fará antes de fazê-lo.
Não é isso que queremos! Vejamos a expansão de parâmetros novamente.
OK, isso funciona. Vamos definir
newf
o valor correto.Parece bom. Continue o script.
fonte
O método padrão para depurar scripts na maioria dos shells baseados em Bourne, como o bash, é escrever
set -x
na parte superior do seu script. Isso tornará o bash mais detalhado sobre o que está sendo feito / executado e como os argumentos são avaliados.isso é útil para o intérprete ou para scripts internos. Por exemplo:
No exemplo acima, podemos ver por que a localização está falhando devido a aspas simples.
Para desativar o recurso, basta digitar
set +x
.fonte
Usando o Eclipse
Você pode usar o ambiente combinado do Eclipse e Shelled com o script "_DEBUG.sh" vinculado abaixo.
http://sourceforge.net/projects/shelled/files/shelled/update/
http://sourceforge.net/projects/basheclipse/
Cascas de comutação
Por padrão, a ferramenta de desenvolvimento Shelled usa
/bin/dash
como intérprete. Alterei isso para/bin/bash
ter uma melhor compatibilidade com a maioria dos exemplos de shell na Web e no meu ambiente.NOTA: Você pode alterar isso acessando: Janela -> Preferências -> Shell Script -> Intérpretes
Instruções de instalação
O pacote Debugger possui as etapas para usar o
_DEBUG.sh
script para sua depuração de script, que é basicamente (o readme.txt):A interface do usuário de depuração do bash
Este depurador do bash possui todos os recursos dos depuradores de programação padrão, como:
O IDE Shelled (Shell Script Editor) (Ambiente de desenvolvimento integrado) possui um bônus adicional de executar verificação de contexto, realçar e recuar enquanto escreve seu script. Se não recuar corretamente, você poderá imediatamente sinalizar / muitos erros locais lá.
Existem outros benefícios do IDE , como:
fonte
Um recurso maravilhoso apareceu nos últimos anos: http://shellcheck.net
mostra mais do que o bash normal, permitindo encontrar facilmente aquelas citações não fechadas ou suportes encaracolados, etc.
Apenas certifique-se de não colar informações confidenciais (ips, senhas etc.) na rede ... (especialmente por ser http, sem criptografia) (acredito que o shellcheck também esteja disponível para download, mas não tenho certeza)
fonte
basta usar:
o mesmo para shell:
fonte
Atualmente, existe o VS Code Bash Debug.
https://marketplace.visualstudio.com/items?itemName=rogalmic.bash-debug
Possui 'Step in / out / over' e também mostra o valor de cada variável.
fonte