I remember in the past, we have two place to set env variables for Ubuntu

  1. Login shell - ~/.profile
  2. Non login shell - ~/.bashrc

But now according to the doc [1], they are not recommended anymore. And we should use ~/.pam_environment, but my understanding is this is for login shell, so how about non login shell?

Where should I use?

[1] https://help.ubuntu.com/community/EnvironmentVariables


~/.pam_environment (and /etc/environment) is parsed when you log in (including when you log in graphically). After that, all processes run from a logged in session will inherit the environment variables set in those two files.

Note though, that ~/.pam_enviornment is not a shell script. It only accepts KEY=VALUE pairs; it won't expand ~ or $VAR or any other such shell syntax, so it's not usable for all cases. If you want to prefix/append ~/bin to PATH for instance, you'll have to do that in ~/.profile. Because PATH=~/bin:$PATH won't be interpreted correctly by pam_env.

~/.profile is also read when you log in graphically.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.