what does export do?

linux user linuxusr at cableone.net
Mon May 23 14:49:47 UTC 2005


> linux user wrote:
> > 
> >>On Monday 23 May 2005 02:04, Deron Meranda wrote:
> >>
> >>>Environment variables are private to each process.  Although each
> >>>process *usually* gets its initial set of variables by copying those
> >>>from it's parent, from that point on they are different.  A variable
> >>>lookup does not go "up the chain" of processes...it only looks in the
> >>>current process.
> >>>
> >>>You can see the current set of environment variables in a shell by
> >>>using the "env" builtin command.  For non-shell programs there is
> >>>usually a language-dependent method to get to them.  In C/C++ for
> >>>instance there is the environ[] array as well as the getenv(3) library
> >>>call.  In Python you have the sys.environ dictionary.  And so on for
> >>>other languages.
> >>>
> >>>If you want to see the environment variables in some other process
> >>>your choices are more restricted.  Given that you have proper security
> >>>permissions, you can look at the /proc/nnnn/environ file, where nnnn
> >>>is the process ID number.  The variables are separated by 0-valued
> >>>bytes, so the easiest way to just peek at them is perhaps,
> >>>
> >>>  cat /proc/12345/environ | xargs -0 -n 1 echo     # that's a
> >>>digit-zero in the "-0"
> >>>
> >>>They are usually listed unsorted, so you can also pipe it through the
> >>>sort command.
> >>>[The above technique is Linux-specific; other Unix-based OS's have
> >>>slightly different mechanisms].
> >>>
> >>>Now, as far as the export command...the shell (bash and others) is
> >>>really just a simple interactive programming language.  Like most
> >>>programming languages it has it's own concept of a "variable".  The
> >>>shell's variables are actually distinct from environment variables,
> >>>which the kernel itself keeps.  The export command tells the shell
> >>>that you want it to essentially equate the two....meaning that
> >>>whenever you change the value of a shell variable, it will also
> >>>implicitly change the value of a equivalently named environment
> >>>variable.  Environment variables will be inherited by any child
> >>>processes the shell happens to start, shell variables will not be.
> >>>
> >>>Incidentally you only need to export a variable once; you don't need
> >>>to keep exporting it every time you change it's value.
> >>>--
> >>>Deron Meranda
> >>
> >>This is by far the most complete and understandable explanation 
> >>of environment 
> >>variables and exporting. Not just answers the question, but 
> also lets one 
> >>learn the concept behind it. I just wish that there be as many as 
> >>possible 
> >>such good answers on the list... :-))
> > 
> > 
> > Yes.  It is very detailed.  Here are a couple of minor details 
> to add to what's above.
> > 
> > If a user exports an environment variable from a terminal it's 
> only good for that terminal.
> > 
> > linux at example% export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:lib
> > 
> > The above line sets the environment variable LD_LIBRARY_PATH to 
> the current LD_LIBRARY_PATH plus the relative lib directory.
> > 
> > If you're using the bash shell, to view an entire list of 
> environment variables for a terminal just type "export".  To make 
> permanent changes to environment variables, again if using the 
> bash shell, the user can go to their home location and edit the 
> .bashrc file.
> > 
> > .bashrc example:
> > 
> > LD_LIBRARY_PATH=$LD_LIBRARY_PATH:home/linux/lib
> > 
> > After adding the above line to the .bashrc file, the load 
> library path will be the same for every terminal and doesn't have 
> to be set each time a new terminal is opened.
> > 
> > If you want this path to be available to any terminal that is 
> open you will have to "source .bashrc" at the command prompt.  
> Otherwise, just close all active terminals and open new ones.
> > 
> > 
> Errm don't you need to export that ie;
> LD_LIBRARY_PATH=$LD_LIBRARY_PATH:home/linux/lib
> export LD_LIBRARY_PATH


No.  Not in the .bashrc file.


> 
> Regards.
> 
> Rick





More information about the users mailing list