Qualquer maneira de mostrar cada passo durante o processamento do comando?

6

set -x mostra apenas um resultado final do comando. Qualquer maneira de ver cada passo mais claro, como as fotos abaixo.

    
por Karl 28.11.2016 / 18:46

2 respostas

2

Parece que você gostaria de ter um analisador de sintaxe e um analisador de shell que gerem os tokens encontrados e as ações que ele executa ao longo do caminho para executar o comando real.

Não tenho conhecimento de nenhum shell que faça isso, pois isso desaceleraria o processamento imensamente, além de produzir uma enorme quantidade de saída para cada comando, mesmo que um pouco complexo.

Com bash , se você compilar o shell você mesmo com a macro DEBUG definida e se você habilitar todas as chamadas comentadas para a função itrace() no código fonte do shell 1 , então você pode obter um pouco do que você está querendo ver:

bash-4.4$ if [[ "$BASHPID" = 10 ]] && [[ "$USER" = myself ]]; then echo hello me; fi
TRACE: pid 22914: parse_matched_pair[9]: open = " close = " flags = 0
TRACE: pid 22914: parse_matched_pair[9]: returning $BASHPID"
TRACE: pid 22914: parse_matched_pair[9]: open = " close = " flags = 0
TRACE: pid 22914: parse_matched_pair[9]: returning $USER"
TRACE: pid 22914: param_expand: '$BASHPID' pflags = 0

Aqui, você pode ver o analisador emitindo algumas instruções de depuração sobre como localizar aspas duplas e variáveis de abertura e fechamento. Posteriormente, outra etapa de processamento nos informa que uma expansão de parâmetro de $BASHPID é executada, mas longe de todas as etapas estão listadas.

Este tipo de saída de depuração de bash é mais útil para pessoas realmente envolvidas com a escrita e modificação do código-fonte do shell, e definitivamente não tem a intenção de servir como uma forma de entender a interpretação e a interpretação de suas entradas.

Para se familiarizar mais com o funcionamento da sintaxe e da gramática do shell, sugiro começar em a definição POSIX da gramática do shell (que é bastante complexa e mais ou menos insignificante para quem não consegue ler EBNF ).

1 Exceto por um em lib/glob/glob.c que possui um erro de sintaxe.

    
por 02.08.2018 / 17:15
-2

set -x é para scripts de shell bash, não funcionará para arquivos binários.

Se você quiser rastrear uma execução binária, considere um depurador (por exemplo, gdb )

    
por 28.11.2016 / 19:37