Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Correct way to set environment



On Sat, 2012-12-15 at 14:29 +0100, Florian Lindner wrote:
> I'm a bit puzzled about the way to set global environment variables.
> 
> I've ushed .zshenv for that purpose since it is sourced on every shell
> invocation.
> 
> florian@horus ~ % cat .zshenv
> PATH=$HOME/flof/src:$HOME/software/bin:$PATH
> PATH=/home/florian/software/src/boar:$PATH
> 
> PYTHONPATH=$HOME/flof/src:$PYTHONPATH
> 
> 
> No other relevant z-files are present. This works as far as it sets
> the PYTHONPATH variable but if I launch python it is not taken into
> account. When I use export PYTHONPATH, the pythonpath gets longer and
> longer if I invoke a zsh session within a zsh session.

First thing:  unless the variable is exported, it remains as a shell
variable and does not get into the environment.  You do need to export
the variable.

When you do this, as you have noticed, because .zshenv is sourced at
every subshell invocation, the path keeps growing because you keep
appending or prepending values to the path every time.

> What is the best way to set some environment variables, no matter how
> (login, interactive, ...) the shell is invoced?

You could use a guard environment variable:

        if [[ $MY_ENVIRONMENT != yes ]]
        then
          export PATH=$HOME/flof/src:$HOME/software/bin:$PATH
          export PATH=/home/florian/software/src/boar:$PATH
          export PYTHONPATH=$HOME/flof/src:$PYTHONPATH
          export MY_ENVIRONMENT=yes
        fi

Or you could only append a path to these variables if they don't contain
it already.

Phil.



Messages sorted by: Reverse Date, Date, Thread, Author