Estou tentando depurar o que o bash faz na inicialização do login para Linux. Eu li que "bash -x" fará com que o bash imprima o que está fazendo, mas não imprime comandos em arquivos de origem, como "set -x" faz. Não consigo usar "set -x" porque a inicialização é executada antes que eu possa chamá-lo. "bash -x" parece ser bem remunerado no OS X, mas isso pode ser devido às versões do bash.
Linux: 3.2.25
OS X: 3.2.48
Aqui está um trecho do comportamento não recorrente 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 o /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?
bash -l
? Isso é destinado a conchas interativas. Um script não é um shell interativo.ssh user@host 'bash -l -c command'
para obter o ambiente adequado carregado. 2) Você é um administrador de sistema e deseja solucionar o que os scripts init estão fazendo antes da execução do script -bash -l -x
mostrará a você. Às vezes, você deseja saber onde uma variável env está sendo definida.Como você está fornecendo 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 em depuração mais. Lembre-se de que quando você cria um script, ele é executado no shell atual; portanto, se você definir -x uma vez, isso será bom para todos os scripts de origem.
fonte