我有一台运行 MacOS 10.14.6 的 2019 Mac。我已经将其配置为使用我公司的企业代理大约一个月,并且直到最近,各种命令行程序(例如 curl、brew 和 git)的行为都符合预期。
从第一天起,我的 /etc/profile 配置如下:
$ cat /etc/profile
# System-wide .profile for sh(1)
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
fi
http_proxy=http://proxy.whatever.com:80/
https_proxy=http://proxy.whatever.com:80/
ftp_proxy=http://proxy.whatever.com:80/
no_proxy="localhost,127.0.0.1,192.168.64.2"
all_proxy=192.168.1.1:80
HTTP_PROXY=http://proxy.whatever.com:80/
HTTPS_PROXY=http://proxy.whatever.com:80/
FTP_PROXY=http://proxy.whatever.com:80/
NO_PROXY="localhost,127.0.0.1,192.168.64.2"
ALL_PROXY=192.168.1.1:80
出于某种原因,尽管在终端和 iTerm2 中各种代理环境变量的行为均符合您的预期,但上面列出的所有程序现在都会忽略代理设置:
# Output from Terminal
$ curl https://www.google.com/
curl: (7) Failed to connect to www.google.com port 443: Operation timed out
$ echo $http_proxy
http://proxy.whatever.com:80/
$ echo $https_proxy
http://proxy.whatever.com:80/
# Output from iTerm2
$ echo $http_proxy
http://proxy.whatever.com:80/
$ curl https://www.google.com/
curl: (7) Failed to connect to www.google.com port 443: Operation timed out
$ echo $https_proxy
http://proxy.whatever.com:80/
有趣的是,printenv 看不到代理环境变量,而 echo 可以,旧的 set 方法也可以:
$ (set -o posix ; set) | grep proxy
FTP_PROXY=http://proxy.whatever.com:80/
HTTPS_PROXY=http://proxy.whatever.com:80/
HTTP_PROXY=http://proxy.whatever.com:80/
ftp_proxy=http://proxy.whatever.com:80/
http_proxy=http://proxy.whatever.com:80/
https_proxy=http://proxy.whatever.com:80/
no_proxy=localhost,127.0.0.1,192.168.64.2
我试图运用逻辑和理性,但我没有心理模型来判断这里可能出了什么问题。
答案1
有趣的是,printenv 看不到代理环境变量,而 echo 可以,旧的 set 方法也可以
echo $http_proxy
告诉你 shell本身扩容$http_proxy
成功。set
是一个可以访问的 shell 内置命令shell 变量。
但
printenv
打印自己的环境。
什么使变量成为“环境变量”?我export
在您的 中没有看到profile
。看起来变量没有被导出。将它们导出到环境中:
export http_proxy=http://proxy.whatever.com:80/
# etc.