what does export do?

Rick rtee at blueyonder.co.uk
Mon May 23 15:19:53 UTC 2005


linux user wrote:
>>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.
> 
I tried this both it /etc/bashrc and ~/.bashrc, it doesn't work without 
exporting it.

Regards.

Rick

-- 
Email which contains HTML will be deleted unread.




More information about the fedora-list mailing list