首页 文章

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

提问于
浏览
357

当我使用sudo的任何命令时,环境变量不存在 . 例如,在设置HTTP_PROXY之后,命令 wget 在没有 sudo 的情况下正常工作 . 但是,如果我键入 sudo wget ,它表示无法绕过代理设置 .

4 回答

  • 278

    首先你需要 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.
    
  • 44

    诀窍是通过 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"
    
  • 408

    对于您想要一次性使用的单个变量,您可以将其作为命令的一部分 .

    sudo http_proxy=$http_proxy wget "http://stackoverflow.com"
    
  • 20

    您还可以将Ahmed Aswani答案中的两个 env_keep 语句合并为一个语句,如下所示:

    Defaults env_keep += "http_proxy https_proxy"

    您还应该考虑仅为一个命令指定 env_keep ,如下所示:

    Defaults!/bin/[your_command] env_keep += "http_proxy https_proxy"

相关问题