为什么 sudo curl 忽略代理设置?

Jof*_*sey 6 networking sudo proxy curl

$ echo $http_proxy
http://my.proxy.com

$ curl -v http://files.com/a.txt
* About to connect() to proxy my.proxy.com
# Correct downloading

$ sudo echo $http_proxy
http://my.proxy.com

$sudo curl -v http://files.com/a.txt
# Hanging.
Run Code Online (Sandbox Code Playgroud)

最后一个命令不使用代理。为什么?

$su
$curl -v http://files.com/a.txt
Run Code Online (Sandbox Code Playgroud)

也工作正常。

Mat*_*Mat 7

这不会像你认为的那样做:

sudo echo $http_proxy
Run Code Online (Sandbox Code Playgroud)

有了它,被调用之前$http_proxyshell 扩展,所以它选择了你自己的环境。 sudo

一个普通的su(没有-,-l--login)也保持(大部分)环境完好无损,因此代理设置被继承。

sudo默认情况下不保护环境。你可以尝试:

sudo -E curl ...
Run Code Online (Sandbox Code Playgroud)

(为了保护整个环境,如果你被允许这样做),或者

sudo http_proxy=$http_proxy curl ...
Run Code Online (Sandbox Code Playgroud)

只传递http_proxy(更安全)。