60

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.

4
  • 2
    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...
    – Gareth
    May 16, 2009 at 14:31
  • 9
    Why are people voting this question down? Seems perfectly legit to me? May 16, 2009 at 15:17
  • 3
    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, 2009 at 16:30
  • 4
    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, 2011 at 13:31

1 Answer 1

23

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
2
  • 6
    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 Jan 25, 2013 at 3:13
  • 6
    Now, THAT is an answer I can understand: linuxquestions.org/questions/linux-general-1/… Jan 25, 2013 at 3:17

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .