One of the things you always have trouble remembering when working with linux is what is the correct “.profile” to edit when you want to automatically set environmental variables.
According to the bash man page, .bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.
when you login when using a console, either physically at the machine or using ssh, .bash_profile is executed.
However, if you launch a terminal within a windowing system such as GNOME,KDE, launch the Emacs *shell* mode, or execute /bin/bash from within another terminal then .bashrc is executed.
Most people edit the files so one calls the other anyway.
To do this you need to open .bash_profile and uncomment the following lines (under the comment # include .bashrc if it exists):
if [ -f ~/.bashrc ];
Now when we login to our machine from a console,.bashrc will get called.
Is there a system wide .bashrc like file? For interactive logons /etc/profile is sourced, but for non interactive I would really like to have a system wide file for all users without having to resort to making a .bashrc file on . /etc/profile.
yes there is /etc/bash.bashrc (in my Edgy at least).
Well I want both .bashrc and .bash_profile to be called whether from emacs shell or login. Having profile call rc works fine for login; but if emacs wants rc to call profile, you’d be creating an incredible infinite loop, right?
So put something like this in rc maybe? (or in each file?)
[ -z “RC_BEEN_THERE” ] || return
Or am I missing something obvious?
PS – it seems that on my lenny system, the login calls .bashrc for a *root* login, but not a user. What’s up with that?
Why not simply create a symbolic link? I put everything I need in .bashrc and create a symbolic link called .bash_profile pointing to .bashrc