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.)
set helpdiz apenas-x Print commands and their arguments as they are executed.. Não consegui ' encontrar algo sobre como desmarque isso no shell atual.set helpdefine os parâmetros de posição para a palavrahelpe não ' não produz nada.help setfornece uma linha ou mais para cada opção, incluindo aquela que você mostra para-xna minha versão (mais antiga) e em t O final da lista dizUsing + rather than - causes these flags to be turned off.