A resposta é que o bash procurará esses três arquivos (em situações ligeiramente diferentes), mas normalmente executará apenas um deles.
Ao executar um shell login (normalmente quando você faz login em um terminal, ou quando abre um Terminal GNOME ou similar, ou quando usa su -
), mais especificamente um shell de login interativo Em seguida, ele executará o /etc/profile
em todo o sistema e, depois disso, ele procurará ~/.bash_profile
, ~/.bash_login
ou ~/.profile
e executará o primeiro daqueles que encontrar.
Na página do bash man:
When bash is invoked as an interactive login shell, or as a non-interactive shell with the
--login
option, it first reads and executes commands from the file/etc/profile
, if that file exists. After reading that file, it looks for~/.bash_profile
,~/.bash_login
, and~/.profile
, in that order, and reads and executes commands from the first one that exists and is readable. The--noprofile
option may be used when the shell is started to inhibit this behavior.
Quando o bash é executado como um shell interativo, mais especificamente um shell interativo de não-login, ele lerá ~/.bashrc
e executará esse arquivo.
Na página do bash man:
When an interactive shell that is not a login shell is started, bash reads and executes commands from
~/.bashrc
, if that file exists. This may be inhibited by using the--norc
option. The--rcfile
file option will force bash to read and execute commands from file instead of~/.bashrc
.
O que as distribuições Linux normalmente fazem são enviar arquivos ~/.bash_profile
, ~/.profile
e ~/.bashrc
que se interligam, para que você tenha um comportamento mais consistente sem precisar duplicar as configurações entre os arquivos ...
Por exemplo, o padrão ~/.profile
do Debian contém este trecho:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Portanto, é explicitamente fazer o sourcing de ~/.bashrc
, para que tanto os shells interativos de login como os não-login incluam as personalizações adicionadas ao arquivo.