To create persistent environment variables, I add the script file to /etc/profile.d directory, for example:
# my script export MY_VAR=var_value
This works properly for current user:
alex@alex-64:~$ echo $MY_VAR var_value
Now I need the same environment variables for the root user, but /etc/profile.d script doesn't work for root:
alex@alex-64:~$ echo $MY_VAR var_value alex@alex-64:~$ sudo su root@alex-64:/home/alex# echo $MY_VAR root@alex-64:/home/alex#
How can I set the same variables for the root?
14 Answers
sudo does not normally preserve local environment variables. You should use it with the -E switch to do so, i.e. sudo -E su will preserve $MYVAR for root.
Alternatively, to create persistent variables that are truly system-wide, you should set them in /etc/environment.
Defaults env_reset in /etc/sudoers will reset root's PATH defined by /etc/environment.
You could modify it to Defaults !env_reset to disable resetting or add:
Defaults secure_path="my/custom/path:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin 1 Like the process you define your own environment variable, for example by editing '~/.bashrc', you can define root's environment variable by editing '/root/.bashrc'.
You can pass environment variables using env flag. I always need to get around proxies and this is a constant issue for me. Especially when you need to pass PATH and proxy environment variables.
Command:
sudo env "ENV=$ENV1" "ENV2=$ENV2" [command]And you can add it as an alias (add this .bashrc, .bash_aliases or .zshrc etc).
Example of my alias:
alias psudo='sudo env "PATH=$PATH" "HTTP_PROXY=$HTTP_PROXY" "HTTPS_PROXY=$HTTPS_PROXY" "http_proxy=$http_proxy" "https_proxy=$http_proxy"'Be mindful that this obviously reduces the security of sudo.