What is the difference between a 'Login' and an 'Interactive' bash shell

16,790

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
Share:
16,790

Related videos on Youtube

Gareth
Author by

Gareth

There is no excellent beauty that hath not some strangeness in the proportion. - Sir Francis Bacon (1561 - 1626)

Updated on September 17, 2022

Comments

  • Gareth
    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
      Gareth about 15 years
      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...
    • duffbeer703
      duffbeer703 about 15 years
      Why are people voting this question down? Seems perfectly legit to me?
    • derobert
      derobert about 15 years
      Ugh, take the answer out of your question, and the post it as an answer. Its OK to answer your own question.
    • Sumeet Kashyap
      Sumeet Kashyap over 13 years
      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.
  • François Beausoleil
    François Beausoleil over 11 years
    Now, THAT is an answer I can understand: linuxquestions.org/questions/linux-general-1/…