gnu.org/software/bash/manual/bash.html#Bash-Startup-Files
1. Invoked as an interactive login shell, or with --login
When Bash is invoked as an interactive login shell, or as a non-interactive shell with the
--loginoption, 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--noprofileoption may be used when the shell is started to inhibit this behavior.When an interactive login shell exits, or a non-interactive login shell executes the exit builtin command, Bash reads and executes commands from the file
~/.bash_logout, if it exists.
2. Invoked as an interactive non-login shell
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--norcoption.
The--rcfilefile option will force Bash to read and execute commands from file instead of~/.bashrc.So, typically, your
~/.bash_profilecontains the lineif [ -f ~/.bashrc ]; then . ~/.bashrc; fiafter (or before) any login-specific initializations.
gnu.org/software/bash/manual/bash.html#Invoked-as-an-interactive-non_002dlogin-shell
3. Invoked non-interactively
When Bash is started non-interactively, to run a shell script, for example, it looks for the variable
BASH_ENVin the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute.
Bash behaves as if the following command were executed:if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fibut the value of the
PATHvariable is not used to search for the filename.
As noted above, if a non-interactive shell is invoked with the--loginoption, Bash attempts to read and execute commands from the login >shell startup files.
gnu.org/software/bash/manual/bash.html#Invoked-non_002dinteractively
4. Invoked with name sh
If Bash is invoked with the name
sh, it tries to mimic the startup behavior of historical versions ofshas closely as possible, while conforming to the POSIX standard as well.When invoked as an interactive login shell, or as a non-interactive shell with the
--loginoption, it first attempts to read and execute commands from/etc/profileand~/.profile, in that order.
The--noprofileoption may be used to inhibit this behavior.
When invoked as an interactive shell with the namesh, Bash looks for the variableENV, expands its value if it is defined, and uses the expanded value as the name of a file to read and execute.
Since a shell invoked asshdoes not attempt to read and execute commands from any other startup files, the--rcfileoption has no effect.
A non-interactive shell invoked with the nameshdoes not attempt to read any other startup files.When invoked as
sh, Bash enters POSIX mode after the startup files are read.