使用sudo时如何保留环境变量

新手上路,请多包涵

当我使用任何带有 sudo 的命令时,环境变量都不存在。例如,在设置 HTTP_PROXY 之后,命令 wget 没有 sudo --- 可以正常工作。但是,如果我输入 sudo wget 它说它不能绕过代理设置。

原文由 Ahmed Aswani 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

诀窍是通过 sudo visudo 命令将环境变量添加到 sudoers 文件并添加以下行:

 Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

取自 ArchLinux wiki

对于 Ubuntu 14,您需要在单独的行中指定,因为它返回多变量行的错误:

 Defaults  env_keep += "http_proxy"
Defaults  env_keep += "https_proxy"
Defaults  env_keep += "HTTP_PROXY"
Defaults  env_keep += "HTTPS_PROXY"

原文由 Ahmed Aswani 发布,翻译遵循 CC BY-SA 3.0 许可协议

首先你需要 export HTTP_PROXY 。其次,您需要阅读 man sudo ,并查看 -E 标志。这有效:

 $ export HTTP_PROXY=foof
$ sudo -E bash -c 'echo $HTTP_PROXY'

这是手册页中的引用:

 -E, --preserve-env
             Indicates to the security policy that the user wishes to preserve their
             existing environment variables.  The security policy may return an error
             if the user does not have permission to preserve the environment.

原文由 Employed Russian 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏