Para descobrir o que está chamando esse script de configuração de ambiente, você precisa adicionar comandos de rastreamento nesse script, não no único local em que sabe que é usado.
Não há uma maneira portátil de relatar a pilha de inclusões de script de shell. No bash, você pode ver isso através da variável BASH_SOURCE
. O Dash mantém os scripts de origem abertos enquanto os executa, portanto, listar os arquivos abertos deve lhe dar uma boa ideia. Como o bash é o shell interativo padrão e o dash é o shell de script padrão, isso deve cobrir a maioria dos casos.
if [ -n "$BASH_SOURCE" ]; then
eval 'echo "${BASH_SOURCE[@]}"'
else
readlink /proc/$$/fd/[4-9] 2>/dev/null
fi
( ${BASH_SOURCE[@]}
é protegido por trás de eval
porque é um erro de sintaxe em sh.)
Observe que .bashrc
ou /etc/bash.bashrc
é o local errado para variáveis de ambiente . Ele é executado apenas por instâncias interativas não-login do bash - em particular, ele não é executado para logins SSH. Se /etc/bash.bashrc
for executado para um login SSH, isso significa que outro script (normalmente ~/.bash_profile
) o origina. O local certo para variáveis de ambiente específicas do site é um script em /etc/profile.d/
ou entradas extras em /etc/environment
.
Em relação a shells de login e shells interativos, consulte Diferença entre o login Shell e Non-Login Shell?