I'm trying to integrate RVM with gnome-terminal.
Per default, gnome-terminal does not start bash as a login shell. I enabled run command as a login shell
as suggested in this answer about the same topic setting up RVM, but when I do this the .bashrc
file is not read.
For example, I create an environment variable in .bashrc
and then when I start a new gnome-terminal I cannot read it. I need to run explicitly source .bashrc
to read the file.
Is this the expected behavior?
Best Answer
Yes, that is the expected behaviour.
The behaviour, in short, is as follows:
~/.profile
~/.bashrc
Read the bash manual about startup files for more details.
Personally, I think that this behaviour is strange and I have not yet found a rationalization for this design decision.
Some explanation of the terminology:
Most shells you see are interactive non-login shells. This is especially true if you are running a graphical environment like gnome, because then gnome is the "login shell". Any bash session started inside gnome is a non-login shell. If you want to see a real interactive login shell then go to a virtual console (using
Ctrl+Alt+F1
) and then log in using your username and password. That is a real interactive login bash shell. You can go back to the graphical shell usingCtrl+Alt+F7
.There is an option
--login
which will make bash behave as if it is a login shell even if started after your have logged in. Configuring gnome-terminal to start bash as a login shell means it will start bash using the--login
option.Usually you want bash to always read
~/.bashrc
in an interactive shell. Here is how I recommend to do that:Create a
~/.bash_profile
file. If bash is started as a login shell it will first look for~/.bash_profile
before looking for~/.profile
. If bash finds~/.bash_profile
then it will not read~/.profile
.Put the following lines in
~/.bash_profile
:Now if bash is started as an interactive login shell it will read the following files:
~/.bash_profile
~/.profile
~/.bashrc
and if bash is started as an interactive non-login shell:
~/.bashrc
You should put stuff which is bash specific in
~/.bashrc
and stuff which is not bash specific in~/.profile
. For examplePATH
goes in~/.profile
andHISTCONTROL
goes in~/.bashrc
.Note that
~/.profile
is not bash specific. Other text based shells (for example sh or ksh) and graphical shells (gnome) also read~/.profile
. That is why you should not put bash specific stuff in~/.profile
.