A maneira como supõe funcionar é que, no ponto em que você recebe um prompt de shell, ambos .profile e .bashrc foram executados. Os detalhes específicos de como chegar a esse ponto são de relevância secundária, mas se nenhum dos arquivos for executado, você terá um shell com configurações incompletas.
A razão pela qual os emuladores de terminal no Linux (e outros sistemas baseados em X) não precisam para executar .profile é que ele normalmente já teria sido executado quando você efetuou login no X. As configurações em .profile devem ser do tipo que pode ser herdada por subprocessos, portanto, desde que seja executada uma vez quando você efetuar login (por exemplo, via .Xsession ), nenhuma outra subshell precisará ser executada novamente. isso.
Como a página wiki Debian ligada por Alan Shutko explica:
"Why is
.bashrca separate file from.bash_profile, then? This is done for mostly historical reasons, when machines were extremely slow compared to today's workstations. Processing the commands in.profileor.bash_profilecould take quite a long time, especially on a machine where a lot of the work had to be done by external commands (pre-bash). So the difficult initial set-up commands, which create environment variables that can be passed down to child processes, are put in.bash_profile. The transient settings and aliases which are not inherited are put in.bashrcso that they can be re-read by every subshell."
Todas as mesmas regras também se aplicam ao OSX, exceto por uma coisa - a GUI do OSX não executa .profile quando você efetua login, aparentemente porque tem seu próprio método de carregar configurações globais. Mas isso significa que um emulador de terminal no OSX precisa executar o .profile (informando ao shell que ele inicia um shell de login), caso contrário você acabaria com um shell potencialmente danificado. / p>
Agora, uma espécie de peculiaridade boba do bash, não compartilhada pela maioria dos outros shells, é que ela não executará .bashrc automaticamente se for iniciada como um shell de login. A solução padrão para isso é incluir algo como os seguintes comandos em .bash_profile :
[[ -e ~/.profile ]] && source ~/.profile # load generic profile settings
[[ -e ~/.bashrc ]] && source ~/.bashrc # load aliases etc.
Como alternativa, é possível não ter .bash_profile , e apenas incluir algum código específico bash no arquivo genérico .profile para executar .bashrc , se necessário.
Se o padrão do OSX .bash_profile ou .profile não fizer isso, então isso é um bug. Em qualquer caso, a solução adequada é simplesmente adicionar essas linhas a .bash_profile .
Editar: Como notas de resistência , o shell padrão no OSX costumava ser tcsh, cujo comportamento é muito melhor a esse respeito: quando executado como um shell de login interativo, o tcsh lê automaticamente .profile e .tcshrc / .cshrc e, portanto, não precisa de soluções alternativas como% truque de.bash_profile mostrado acima.
Com base nisso, tenho 99% de certeza de que a falha do OSX em fornecer um padrão apropriado .bash_profile é porque, quando eles mudaram de tcsh para bash, o pessoal da Apple simplesmente não percebeu essa pequena verruga comportamento de inicialização do bash. Com o tcsh, esses truques não eram necessários - iniciar o tcsh como um shell de login de um emulador de terminal do OSX, o Just Plain Works, e fazer a coisa certa sem esses kluges.