O que é `bash -x`

Um colega recentemente me apresentou a bash -x para depurar meus scripts bash sem precisar a echo $foo rota.

$ bash -x hello-world.sh + echo "Hello World" Hello World 

Internamente – como o bash faz isso? Eu verifiquei man bash e (não pareceu?) Mencionou o sinalizador -x ao chamar o intérprete. Estou procurando principalmente uma visão geral do que será e não será depurado no -x ambiente ou em qualquer outra dica.

Resposta

-x é o mesmo que definir xtrace com -o opção para bash. Da minha cópia da página de manual do bash:

Depois de expandir cada comando simples , para o comando , case comando, selecione comando ou aritmética para comando, exibir o valor expandido de PS4 , seguido pelo comando e seu argumento expandido ts ou lista de palavras associadas.

Não acho que haja muitas “pegadinhas” com isso: ele imprime cada comando que executa. Suponho que se você “estiver analisando a stderr saída do shell script, isso pode bagunçar tudo, porque os comandos são impressos em stderr (também conhecido como descritor de arquivo 2), mas parece um caso extremo.

(Você também pode habilitar condicionalmente isso dentro de scripts ou em sessões de shell interativas com set -x para ligue-o e set +x para desligá-lo novamente.)

Comentários

  • Uau. Obrigado . set help diz apenas -x Print commands and their arguments as they are executed.. Não consegui ' encontrar algo sobre como desmarque isso no shell atual.
  • @sherrellbc: set help define os parâmetros de posição para a palavra help e não ' não produz nada. help set fornece uma linha ou mais para cada opção, incluindo aquela que você mostra para -x na minha versão (mais antiga) e em t O final da lista diz Using + rather than - causes these flags to be turned off.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *