Bash Concepts: Difference between revisions
Line 28: | Line 28: | ||
Them it looks for <tt>~/.bash_profile</tt>, <tt>~/.bash_login</tt> and <tt>~/.profile</tt> in that order. It executes commands from the first one that exists and is readable. The <tt>--noprofile</tt> option may be used when the shell is started to inhibit this behavior. | Them it looks for <tt>~/.bash_profile</tt>, <tt>~/.bash_login</tt> and <tt>~/.profile</tt> in that order. It executes commands from the first one that exists and is readable. The <tt>--noprofile</tt> option may be used when the shell is started to inhibit this behavior. | ||
When a login shell exits, bash executes commands from <tt>~/.bash_logout<tt>, if it exists. | When a login shell exits, bash executes commands from <tt>~/.bash_logout</tt>, if it exists. | ||
When an ''interactive'' shell that is not a login shell is started, bash executes commands from <tt>~/.bashrc</tt>, if it exists. This may be inhibited by using the <tt>--norc</tt> option. The <tt>--rcfile</tt> file option will force bash to execute commands from the specified file instead of <tt>~/.bashrc</tt>. | When an ''interactive'' shell that is not a login shell is started, bash executes commands from <tt>~/.bashrc</tt>, if it exists. This may be inhibited by using the <tt>--norc</tt> option. The <tt>--rcfile</tt> file option will force bash to execute commands from the specified file instead of <tt>~/.bashrc</tt>. |
Revision as of 00:40, 23 February 2016
Internal
Login Shell
A login shell is a shell whose first character of its argument zero is a -, or it was started with the --login option.
Interactive Shell
An interactive shell is a shell started:
- without the -c option
- without non-option arguments
- with the -i option
The interactive shell's standard input and error are both connected to terminals.
$- includes i if the shell is interactive, allowing a script or a startup file to test this state.
Non-interactive Shell
A shell started with -c option.
bash Startup Files
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first executes commands from /etc/profile, if exists.
Them it looks for ~/.bash_profile, ~/.bash_login and ~/.profile in that order. It 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 executes commands from ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash executes commands from ~/.bashrc, if it exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to execute commands from the specified file instead of ~/.bashrc.
When bash is started in non-interactive mode, 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 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 file name.
If any of the files exist but cannot be read, bash reports an error.