I have a simple problem understanding a behavior in linux. In short, on linux if i invoke my sh script from a 'Desktop Shortcut' then the script cannot see the latest environment variables (set in bashrc). So i was wondering that in what scope is this shell script located ?

Open a brand new terminal and execute the script using it's complete path like '~/testme.sh' //This can see the value for variable 'TESTVAR' from the .bashrc file.

Now, simply double click and execute the Desktop shortcut.
//This should open a terminal and print out value for 'TESTVAR' as blank.
//So my question is, who is the parent for the terminal opened by this shortcut?

I've tried this on RHL.
Im looking for a solution or a w/a for this problem, hope someone can help soon.

1 Answer
1

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 a login shell exits, bash reads
and executes commands from the file
~/.bash_logout, if it exists.

When an interactive shell that is not
a login shell is started, bash reads
and executes commands from ~/.bashrc,
if that file exists. 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 ~/.bashrc.

Long story short, if you want non-interactive shell's to have certain ENV vars set, then put them in ~/.bash_profile instead of ~/.bashrc