Adding environment variables to bash.

nntpman68 news1234 at free.fr
Thu Sep 11 22:25:22 CEST 2008


>> 
>> doesn't exactly work for Python scripts, though:
>> 
>> $ cat env.py
>> #!/usr/bin/env python
>> import os
>> os.environ["TEST"] = "hello"
>> 
>> $ . ./env.py && env | grep TEST
>> import: unable to open X server `'.
>> bash: os.environ[TEST]: command not found
>> 
>> </F>
>> 



There's two options for the desperate ones.

1. Assuming the python script doesn't want to print anything useful
=========================================================================

the python script just prints the exoprt commands and is
being called via backticks from a shell code snipped being sourced with .

#-------- mypythonfile.py ------------------------
#!/usr/bin/env python
value = myfavourite_python_function()
print 'export ENV_VAR="%s"' ^ value
#--------------- end of file --------------


#----------------- my_wrapper_file.sh ------------------
`./mypythonfile.py`
# file end



and then you call
. ./my_wrapper_file.sh




2._ Pytho script wants to display something and set a variable
===================================================================


a file being invoked with . calls the python script (which will create a
small file with variables to be set).
then this created file is being sourced


#-------- mypythonfile.py ------------------------
#!/usr/bin/env python
value = myfavourite_python_function()
file('my_export_commands.sh','w').write('export ENV_VAR="%s"\n' % value)
#--------------- end of file --------------


#----------------- my_wrapper_file.sh ------------------
./mypythonfile.py
. ./my_export_commands.sh
# file end


bye

N


Fredrik Lundh wrote:
> John Lawrence wrote:
> 
>> You can make a command use the current shell though if you use the '.' 
>> command e.g.:
>>
>> jl > cat env.sh
>> export TEST='hello'
>>
>> jl > ./env.sh && env | grep TEST          #Doesn't set TEST in parent 
>> shell
>> jl > . ./env.sh && env | grep TEST          #Adding '. ' before the 
>> command uses the same shell
>> TEST=hello
> 
> doesn't exactly work for Python scripts, though:
> 
> $ cat env.py
> #!/usr/bin/env python
> import os
> os.environ["TEST"] = "hello"
> 
> $ . ./env.py && env | grep TEST
> import: unable to open X server `'.
> bash: os.environ[TEST]: command not found
> 
> </F>
> 



More information about the Python-list mailing list