What's the difference between .profile and .bash_profile, and when do you configure which? (Mac) [duplicate]
Solution 1:
Assuming bash
is your default shell, the differences are described in the bash
man page (man bash
):
When bash is invoked as an interactive login shell, or as a non-interac-
tive shell with the --login option, 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. The --noprofile option may be used when the shell is started
to inhibit this behavior.
There is more detail in the man page that covers POSIX-shell compatibility mode, which is where .profile
comes from. Read the whole man page section for all the details.
Solution 2:
If you configure .bash_profile
, you won't also need to configure .profile
.
I like to keep my own aliases and commands in .profile
so that if I mess up anything, I know that I can always delete the .profile
without affecting the system at large or other applications that modify .bash_profile
(like MacPorts).
To use a .profile
, you may need to include the line source ~/.profile
in your .bash_profile
so that the .profile
file is read (see Ned Deily's answer).
Solution 3:
.profile is executed by bash when you get a normal shell process -- e.g. you open a terminal tool. .bash_profile is executed by bash for login shells -- so this is when you telnet/ssh into your machine remotely for instance. For instance if you ssh remotely into a machine (let's say you open an X Terminal) you will get initially .bash_profile executed. If in that XTerminal you type "xterm" and spawn another X Terminal, then .profile will be executed for the second instance of XTerminal. The files reside in your home directory (~). If I'm not mistaking by default they both execute ~/.bashrc so you can edit that to configure common settings/variables for both login and non login shells (e.g setting PATH, some aliases/shortcuts etc). You might want occasionally to configure certain things differently for these 2 but I have never encountered that need -- however, the possibility is there.
Solution 4:
for the fast and simple config (where you don't want complicate things) simply configure everything in your ~/.profile. Only when you run into some troubles (but probably will never) learn more about the .bash_login or .bash_profile ;)
I'm on OS X too, and never needed .bash_profile or .bash_login and using only .profile, but your mileage may vary...