set -x
em algum lugar no arquivo raiz (aquele que requer todos os outros arquivos) deve funcionar. Como alternativa, introduza algo como [[ !-z "$DEBUG" ]] && set -x
em cada arquivo e chame com DEBUG=1 script.sh
.
Estou tentando depurar o que o bash faz na inicialização do login para Linux. Eu li que "bash -x" fará o bash imprimir o que está fazendo, mas não imprime comandos em arquivos de origem como "set -x". Não consigo usar "set -x" porque a inicialização é executada antes de poder chamá-lo. "bash -x" parece se reciclar bem no OS X, mas isso pode ser por causa das versões bash.
Linux: 3.2.25
OS X: 3.2.48
Aqui está um trecho do comportamento não recursivo no Linux:
bash -l -x -c 'echo 1'
# ... snip ...
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/vim.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/vim.sh
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/which-2.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/which-2.sh
# ... snip ...
Observe como /etc/profile.d/vim.sh é originado, mas seus comandos não são impressos. Existe uma solução alternativa sem atualizar? Isso é causado pela diferença de versão?
set -x
em algum lugar no arquivo raiz (aquele que requer todos os outros arquivos) deve funcionar. Como alternativa, introduza algo como [[ !-z "$DEBUG" ]] && set -x
em cada arquivo e chame com DEBUG=1 script.sh
.
Como você está obtendo scripts e não está executando, seu primeiro comando no script principal deve ser "set -x"
Agora, todos os scripts de origem serão executados na depuração mais. Lembre-se de quando você fonte um script, ele é executado em seu shell atual, então se você definir -x uma vez, isso será bom para todos os scripts de fontes.