Как сохранить переменные среды при использовании sudo


когда я использую любую команду с sudo переменные среды не существует. Например, после установки при команде wget работает отлично без sudo. Однако если я наберу sudo wget Он говорит, что не может обойти настройки прокси.

4 324

4 ответа:

сначала нужно export HTTP_PROXY. Во-вторых, вы должны прочитать man sudo осторожно, и обратите внимание на -E флаг. Это работает:

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

вот цитата из man-страницы:

-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.

фокус в том, чтобы добавить переменные среды через и добавить эти строки:

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"

для отдельных переменных, которые вы хотите сделать доступными на одной основе, вы можете сделать ее частью команды.

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

вы также можете объединить два env_keep утверждения в ответе Ахмеда Асвани в одно утверждение, подобное этому:

Defaults env_keep += "http_proxy https_proxy"

вы также должны рассмотреть возможность указания env_keep только для одной команды такой:

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