Bash Concepts

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

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.