Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

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.

share|improve this question
    
I'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... –  gyaresu May 16 '09 at 14:31
5  
Why are people voting this question down? Seems perfectly legit to me? –  duffbeer703 May 16 '09 at 15:17
1  
Ugh, take the answer out of your question, and the post it as an answer. Its OK to answer your own question. –  derobert May 16 '09 at 16:30
1  
It'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. –  pjc50 Mar 2 '11 at 13:31

1 Answer 1

up vote 12 down vote accepted

In your login shell's profile files you can set up some things that you will use during your session, and which are needed to be done only once. Some ideas:

  • create a temporary file containing the ip you connected, 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 coworkers want to be aware of each others logins, write(1) messages informing your login

In a non-login shell's files (.bashrc) you should set up your normal environment.

  • 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 varibles 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
share|improve this answer
1  
Is a login shell is the first one that starts when you're fresh on the machine? All other shells that you open after that may or may not be interactive. A shell that's running from cron? Doesn't seem interactive, but is it login? What if you're not on the machine? Those are the questions that are left unanswered –  François Beausoleil Jan 25 '13 at 3:13
3  
Now, THAT is an answer I can understand: linuxquestions.org/questions/linux-general-1/… –  François Beausoleil Jan 25 '13 at 3:17

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.