What is the difference between a 'Login' and an 'Interactive' bash shell
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:
- create a temporary file containing the IP address you connected from, later on you can include it in some scripts setting firewall rules.
- run ssh-agent, ask for your SSH keys, and store the SSH agent environment variables in a file.
- if that is a limited machine, and your co-workers want to be aware of each others logins, write(1) messages informing them of your login.
In a non-login shell's files (.bashrc
) you should configure your shell:
- Fancy prompt
- set aliases
- set history options
- define custom shell functions
- export environment variables, (maybe PAGER, EDITOR if system-wide settings suck)
- load ssh-agent variables saved in
.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
.
[[ -f ~/.bashrc ]] && . ~/.bashrc
Related videos on Youtube
Gareth
There is no excellent beauty that hath not some strangeness in the proportion. - Sir Francis Bacon (1561 - 1626)
Updated on September 17, 2022Comments
-
Gareth almost 2 years
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.
-
Gareth about 15 yearsI've edited the question to fit in more with the half arsed site rules. I don't think I'll ever understand the desire to delete useful information...
-
duffbeer703 about 15 yearsWhy are people voting this question down? Seems perfectly legit to me?
-
derobert about 15 yearsUgh, take the answer out of your question, and the post it as an answer. Its OK to answer your own question.
-
Sumeet Kashyap over 13 yearsIt's a very valid question as the distinction is confusing. Note for example that when you log in to a graphical environment via xdm and run xterm, you get an interactive shell and the login shell startup files aren't run.
-
-
François Beausoleil over 11 yearsNow, THAT is an answer I can understand: linuxquestions.org/questions/linux-general-1/…