A invocação do shell é um pouco complicada. As páginas man do bash e do traço têm INVOCATION
seções sobre isso.
Em resumo, eles dizem (há mais detalhes na página man, você deve ler):
When bash is | it reads
-------------------------------|----------
login shell | /etc/profile and then the first of ~/.bash_profile, ~/.bash_login or ~/.profile that exists.
|
interactive non-login shell | /etc/bash.bashrc then ~/.bashrc
|
non-interactive shell | The contents of $BASH_ENV (if it exists)
|
interactive (as "sh") | The contents of $ENV (if it exists)
-
When dash is | it reads
-------------------------------|---------
login shell | /etc/profile then .profile
|
interactive shell | The contents of ENV (it it exists, can be set in .profile as well as in initial environment)
Eu não sei sobre outros shells de improviso, pois nunca uso nenhum deles. Sua melhor aposta pode ser definir algumas variáveis de ambiente para apontar para o script de localização comum e fornecer manualmente isso (quando apropriado) nos dois casos que não cobrem.