Gnome applications and .bash_profile

Suvayu Ali fatkasuvayu+linux at gmail.com
Tue Nov 3 03:01:46 UTC 2009


Hi Steven,

Steven W. Orr wrote:
> On 11/02/09 04:28, quoth Suvayu Ali:
>> Hi Steven,
>>
>> On Sunday 01 November 2009 09:32 PM, Steven W. Orr wrote:
>>> On 10/31/09 03:39, quoth Jonathan Ryshpan:
>>>
>>> IT IS WRONG to set environment variables in your .bashrc unless you
>>> really
>>> know what you're doing. Most people don't. IT IS WRONG to have to run a
>>> terminal emulator program with the idea that it should be a login
>>> shell. ALL
>>> PROGRAMS use the environment, not just terminal emulators. If you log
>>> in then
>>> your environment should be defined.
>>>
>> What is your comment on the method I posted, have your .bash_profile
>> source your .bashrc ? That way you have a consistent environment every
>> time, irrespective of whether I am at an xterm or VT or simply running
>> some GUI app from a menu or icon. (I am of course assuming my desktop
>> environment sources my .bash_profile, as it should, when I login :) )
>>
>> Would you say that is a proper way to do things?
>>
> 
> It is correct that the .bash_profile should source in the .bashrc but it is
> wrong for a terminal emulator to be executed as a login process to account for
> gdm's deficiency.
> 
> First of all your .bash_profile should source in your .bashrc or else you
> won't get any of your bashrc content in your login process. Starting a login
> process must run your .bash_profile and starting a sub shell process must run
> the .bashrc  This means that the .bashrc must be run by the .bash_profile or
> else the login process will never get any of your local aliases, functions and
> variable settings.
> 
> This confuses a lot of people:
> 
> * When you log in, the login process must define the environment. This is done
> by sucking in the ~/.bash_profile after the /etc/profile
> 
> * The ~/.bashrc is sucked in automatically only by sub shells. To get bashrc
> content added to your login shell, the ~/.bash_profile must pull in the ~/.bashrc
> 
> * The /etc/bashrc is not run by the system. The user is responsible for doing
> this himself. In your ~/.bashrc should be a line that says:
>   . /etc/bashrc
> 
> All of what I describe above is how things should be done, but it is *wrong*
> for the gdm login process to not run the correct files for you in the first
> place. That is why I have showed you how to go about the process of fixing it
> properly. You need to see about pulling in the /etc/profile and
> ~/.bash_profile from the /etc/X11/xinit system. You will *probably* be able to
> add a file (maybe call it) /etc/X11/xinit/xinitrc.d/00_bash_init.sh  It should
> say something like what I mentioned above. I recommend *not* making it
> executable even though all of the files in /etc/X11/xinit/xinitrc.d are. This
> just confuses people more. Sourced files are not executed; they are read into
> a current shell.
> 

I know what you mean. I have to do a lot of data analysis at the 
university and we use a really complex framework written in C++, called 
ATHENA. To ensure all the various sub-packages /behave/ with each other 
we use environment variables controlled with lots of sourced shell 
scripts. Its really amazing and extremely elegant way of controlling how 
things behave. :)

> If you do it wrong then you will be putting a crappy bandage on a system that
> is capable of much elegance. The whole point of environment variables is to
> define what *all* child processes will inherit. Look at the env command. It's
> not about what you see as being used by bash. It's about what the getenv(3)
> and setenv(3) runtime calls make available to all child processes,
> irrespective of what language they are written in. The environment is agnostic
> about linguistics.
> 
> Let's look at an example. In my environment, I define XFILESEARCHPATH and
> XUSERFILESEARCHPATH. If I do it then my applications will start up with the
> correct set of resources. If I don't then they will not. But what I will not
> accept is that I must start my applications from a terminal emulator that was
> artificially started with a --login option. That's just silly. If I want to
> create a button that run my application then I expect that button to be
> running in the proper environment that has those variables set to the values
> that I have defined.
> 
> Make sense?
> 

Thank you for this entire reply Steven. All the subtleties you mentioned 
makes a lot of sense. Following these simple rules makes everything work 
consistently whether its being run from an xterm, VT or from a button on 
my desktop. I'll try to go over what you said again and try to keep 
those in mind while investigating any future issues and will definitely 
try to include any such information in any bug report I contribute to. 
Thanks a lot, learned a lot. :)

-- 
Suvayu

Open source is the future. It sets us free.




More information about the users mailing list