eshell 莫名其妙地设置了 all_proxy

python-mode 下的 ipython, 我发现 pip 会安装失败, 报错是 SOCKS5 不支持. 在 ipython 下执行 !echo $ALL_PROXY, 发现不为空, 这应该就是问题所在. ipython 中执行 !echo $SHELL, 得到的是 /bin/zsh, 的确是 zsh.

但是, 奇怪的地方在这里, 我的配置文件很久以前设置过 all_proxy, 但现在已经没有这个设置了. 并且我在终端 app 中打开一个 zshell, echo $all_proxy 也为空. 因此我觉得与 zsh startup file 无关.

再打开 eshell, 发现 eshell 和 emacs ipython 一样. 也设置了 all_proxy. 再用 emacs 的 shell 命令打开一个终端, 没有设置 all_proxy. 因此我怀疑 emacs ipython 的表现与 eshell 有关.

总结一下异常: ipython 的确用的是 zsh, 但莫名其妙地设置了 all_proxy. zsh 的 eshell 也有同样的问题, 但是 emacs 的 shell 命令就没有这个问题, 与终端 app 中一致. 因为配置文件中本来就没有设置 all_proxy.

我进行过的检查:

  • 确认 zsh 下面这个表格的配置文件都没有设置过 all_proxy
all users user login shell interactive shell scripts Terminal.app
=/etc/zshenv= =.zshenv=
=/etc/zprofile= =.zprofile= x x
=/etc/zshrc= =.zshrc= x
=/etc/zlogin= =.zlogin= x x
=/etc/zlogout= =.zlogout= x x
  • 检查 eshell-login-script, eshell-rc-script 两个变量, 这两个文件都不存在.

是 spacemacs 会对 GUI 进行设置, 设置文件是 ~/.spacemacs.env, 见 Frequently Asked Questions. 我也没想到这个一直没有解决的问题, 在两个多月后导致了另一个莫名其妙的错误(一样的命令, emacs 中 shell 执行错误, 终端执行正确). 做法是 SPC f e e, 编辑, 再 SPC f e E, reload. OK. eshell 并不存在 startup file, 环境变量是抄 emacs 的.