Ever wondered what's the difference between ~/.bashrc, ~/.bash_profile, ~/.profile, /etc/profile, /etc/bash.bashrc (and maybe others) and what their purposes are? I do.
Some interesting excerpts from the bash manpage:
When bash is invoked as an interactive login shell, or as a non-interactive 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.
...
When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. 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 /etc/bash.bashrc and ~/.bashrc.
As far as I understand, a login shell means a session where you log in to the system and directly end up in Bash, like a remote ssh session or logging in through a non-graphical text terminal. A non-login shell is then the type of shells you open after logging in: typically in a graphical session when you open a new terminal window.
How I think things are supposed to work (for a typical setup):
.profileis for things that are not specifically related to Bash, like environment variablesPATHand friends, and should be available anytime. For example,.profileshould also be loaded when starting a graphical desktop session..bashrcis for the configuring the interactive Bash usage, like Bash aliases, setting your favorite editor, setting the Bash prompt, etc..bash_profileis for making sure that both the things in.profileand.bashrcare loaded for login shells. For example,.bash_profilecould be something simple like
. ~/.profile . ~/.bashrc
As stated in the man page excerpt above, if you would omit
.bash_profile, only.profilewould be loaded.
You might also be interested in the page I put together with the most important stuff from my .bashrc, .profile and other files.
/etc/bashrc or bash.barc versus ~/.bashrc
It appears that /etc/bashrc (or /etc/bash.bashrc) is only called/run if it has an entry in your home ~/.bashrc to run it. Otherwise only ~/.bashrc is run. This is the behavior on my Linux computer. There appears to be incorrect information about /etc/bashrc running regardless in circulation, and if there is a way to make that happen, I would like to hear it.
My ~/.profile is not sourced
Strangely, in my PowerPC system running Ubuntu 10.10 with bash 4.1.5(1)-release, my ~/.profile is not sourced when I login, even though I don't have a ~/.bash_profile nor a ~/.bash_login . If I create a ~/.bash_login, that is sourced. If I have both a ~/.bash_login and a ~/.bash_profile, then, as expected, only ~/.bash_profile is sourced. In no case is my ~/.profile sourced.
This is odd and contrary to the bash manual.
RE: My ~/.profile is not sourced
Dang. Now it seems to be working. I'm not sure where or how. Ignore my earlier message about my .profile not being sourced.
Very helpful, thanks.
Very helpful, thanks.
Gotcha
Be careful. The .profile is not run if .bash_profile exists.
the run order is:
1. etc/profile
2. The next file is one of the following, if one is found none of the others are run:
a. ~/.bash_profile
b. ~/.bash_login
c. ~/.profile
well explained
thanks.
I was blind, but now I can see
Thanks for the article. It clears up the whole mystery of just what on earth is going on.
Thanks:)) Great help
Thanks:))
Great help
Thank you.
Thank you.
Post new comment