Bash Concepts: Difference between revisions
No edit summary |
|||
Line 24: | Line 24: | ||
=bash Startup Files= | =bash Startup Files= | ||
When bash is invoked as an interactive login shell, or as a non-interactive shell with the <tt>--login</tt> option, it first executes commands from <tt>/etc/profile</tt>, if exists. | When bash is invoked as an ''interactive'' login shell, or as a ''non-interactive shell with the <tt>--login</tt> option'', it first executes commands from <tt>/etc/profile</tt>, if exists. | ||
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. | ||
Line 30: | Line 30: | ||
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>. | ||
When bash is started in non-interactive mode, to run a shell script, for example, it looks for the variable <tt>BASH_ENV</tt> 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: | When bash is started in ''non-interactive mode'', to run a shell script, for example, it looks for the variable <tt>BASH_ENV</tt> 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: | ||
<pre> | <pre> | ||
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi | if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi |
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.