Todas as perguntas são respondidas na seção "INVOCATION" da página man bash:
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.
When a login shell exits, bash reads and executes commands from the file
~/.bash_logout, if it exists.
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.
Como você pode ver, os shells interativos só acessam .bashrc
, e geralmente .bash_profile
é originado a partir daí, o que explica a ordem que você está vendo.
Muitas vezes, esses arquivos também têm a condição de apenas analisar certas seções apenas para shells interativos ( [[ $- == *i* ]]
), o que explicaria por que algumas partes podem parecer estar faltando para shells não interativas.