Mac 终端和 iterm2 中的 Bash shell 不遵守代理环境变量

Mac 终端和 iterm2 中的 Bash shell 不遵守代理环境变量

我有一台运行 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.

相关内容