Ubuntu – Why isn’t .profile sourced when opening a terminal

bashbashrcenvironment-variablesprofilesource

Just installed Ubuntu 14.04.1 LTS.

According to .profile,

# ~/.profile: executed by the command interpreter for login shells. 
# This file is not read by bash, if ~/.bash_profile or ~/.bash_login exists.

There is no ~/.bash_profile or ~/.bash_login.

It does not seem to source .profile when opening a terminal.

  1. Why doesn't it source .profile when opening a terminal?
  2. Why is .profile there if it is not sourced?
  3. How do I know/control what is sourced when a new terminal is opened?
  4. When a new terminal is opened, does it do a "login"?
  5. Where is a good place to add $HOME/bin to my path? .bashrc? Will that cause a problem because .profile has the same code?

Best Answer

  1. Because terminals don't usually run login shells by default. They also usually have options to run login shells, which do source .profile.
  2. To control the behaviour of login shells.
  3. Depends on the shell. For bash, see the set of startup files.
  4. Not in some sense (updating login records, for example).
  5. If you have a folder called bin in $HOME, the default .profile for Ubuntu does add it to your PATH. Since .profile is sourced at login (even with a GUI login), it should be part of your PATH for non-login shells started after a re-login. It isn't wrong if a directory appears twice in PATH, see this U&L question for details.