What is the difference between a ‘Login’ and an ‘Interactive’ bash shell? I have quoted Wikipedia below but can anybody give a better answer?
EDIT: This is a community wiki so maybe rather than voting to close you could provide examples of which situations call for which type of $SHELL
Startup scripts
When Bash starts, it executes the commands in a variety of different scripts.
When Bash is invoked as an interactive login shell, 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.
When a login shell exits, Bash reads and executes commands from the file ~/.bash_logout, if it exists.
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.
In your login shell's profile files you can set up some things that you will use during your session, and which only need to be done once. Some ideas:
In a non-login shell's files (
.bashrc
) you should configure your shell:.bash_profile
Usually, you would include
.bashrc
from.bash_profile
with the following. Then login shell gets all your customizations, and.bash_profile
file does not have to duplicate things that are already in.bashrc
.