When you login (through the console or kdm/gdm/xdm), a LOGIN SHELL is started. This shell will read /etc/profile (and maybe ~/.profile or ~/.bash_profile) and execute the lines contained in. It will not read ~/.bashrc, unless one of the previous mentionned files calls this file.
After that, all programs that you start will inherit the environment (which includes system variables like PATH which are **exported**) from this LOGIN SHELL. They will read and execute ~/.bashrc.
When you start (for example by clicking on shell icon) two shells, they will both be "child" of this LOGIN SHELL but they will have no link to eachother.
Variables set in shell1 will not propagate to shell2.
Variables set in LOGIN shell will propagate to any child, which means everything. These variables have to be "exported"
Only "exported" variables goes from father to child:
xterm& -> in the new xterm, echo $toto will not display anything.
xterm& -> echo $toto will print 1
1)So you need to put your PATH stuffs in /etc/profile or ~/.profile or ~/bash_profile so that all your programs inherit from this exported variable.
2)Or manually, start a shell and decide that all child shells (called subshells) will inherit from PATH:
xterm& <-- this subshell will have PATH modified
But clicking on the shell icon will start an other independent subshell (of LOGIN shell) and thus won't have PATH set.
Yeah that's a summary
man bash will help you a lot