O sh tradicional lê o arquivo ~/.profile na inicialização quando é um login shell .
Bash, que é compatível com sh, mas oferece recursos adicionais, lê .bash_profile e, se não existir, tenta .profile instead¹. Isso permite que você tenha um .profile para sh simples e um .bash_profile aproveitando os recursos extras do bash quando seu shell de login é bash.
Bash também lê outro arquivo, .bashrc , quando é invocado interativamente. Esse é o lugar para colocar prompts, aliases, configuração de conclusão, etc. No entanto, ele não lê esse arquivo em um shell de login interativo. Portanto, seu .bash_profile deve fornecer .bashrc quando o shell estiver sendo executado de forma interativa - caso contrário, será necessário manter arquivos separados.
Raramente há qualquer motivo para deixar o seguinte conteúdo para .bash_profile :
. ~/.profile
case $- in *i*) . ~/.bashrc;; esac
Coloque coisas do tempo de login como definições de variáveis de ambiente em .profile e coisas para shells interativos em .bashrc .
Se você usar o bash como seu shell de login, talvez não tenha um .profile e coloque o material de login em tempo .bash_profile , além da linha para carregar .bashrc quando interativo.
¹ Também tenta .bash_login antes de .profile , mas isso não é realmente útil.