为了创建持久环境变量,我将脚本文件添加到 /etc/profile.d 目录,例如:
# 我的脚本 导出 MY_VAR=var_value
这对于当前用户来说正常工作:
alex@alex-64:~$ echo $MY_VAR 变量值
现在我需要为 root 用户设置相同的环境变量,但是 /etc/profile.d 脚本对 root 不起作用:
alex@alex-64:~$ echo $MY_VAR 变量值 alex@alex-64:~$ sudo su root@alex-64:/home/alex# echo $MY_VAR root@alex-64:/home/alex#
我如何为根设置相同的变量?
答案1
须藤通常不保存本地环境变量。您应该将其与开关一起使用-E
,即sudo -E su
保存$MYVAR对于根。
或者,要创建真正系统范围的持久变量,您应该在中设置它们/etc/environment
。
答案2
Defaults env_reset
将/etc/sudoers
重置PATH
由 定义的根/etc/environment
。
您可以修改它以Defaults !env_reset
禁用重置或添加:
Defaults secure_path="my/custom/path:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
答案3
与您定义自己的环境变量的过程类似,例如通过编辑“~/.bashrc”,您可以通过编辑“/root/.bashrc”来定义 root 的环境变量。
答案4
您可以使用标志传递环境变量env
。我总是需要绕过代理,这对我来说是个老问题。尤其是当您需要传递PATH
和代理环境变量时。
命令:
sudo env "ENV=$ENV1" "ENV2=$ENV2" [command]
您还可以将其添加为别名(添加此.bashrc
或.bash_aliases
等等.zshrc
)。
我的别名示例:
alias psudo='sudo env "PATH=$PATH" "HTTP_PROXY=$HTTP_PROXY" "HTTPS_PROXY=$HTTPS_PROXY" "http_proxy=$http_proxy" "https_proxy=$http_proxy"'
请注意,这显然会降低 sudo 的安全性。