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
--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 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--norc
option.
The--rcfile
file option will force Bash to read and execute commands from file instead of~/.bashrc
.So, typically, your
~/.bash_profile
contains the lineif [ -f ~/.bashrc ]; then . ~/.bashrc; fi
after (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_ENV
in 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"; fi
but the value of the
PATH
variable is not used to search for the filename.
As noted above, if a non-interactive shell is invoked with the--login
option, 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 ofsh
as 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
--login
option, it first attempts to read and execute commands from/etc/profile
and~/.profile
, in that order.
The--noprofile
option 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 assh
does not attempt to read and execute commands from any other startup files, the--rcfile
option has no effect.
A non-interactive shell invoked with the namesh
does not attempt to read any other startup files.When invoked as
sh
, Bash enters POSIX mode after the startup files are read.