是谁一直把那个代理塞回 Bash?
沿着 Bash 启动文件和启动 shell 的父进程,追踪一个反复出现的代理环境变量。
如果 http_proxy 在下一个终端里又出现了,先找出是谁设置的。再写一个 unset 到 .bashrc 末尾,只能让值在某一次启动里消失,而它的来源仍在别处活跃。
- 确定出问题的那次启动。 它是交互式登录 shell、非登录终端,还是非交互任务?以
sh之名调用的 Bash 也遵循另一套规则。 - 顺着那条启动路径查下去。 交互式登录 shell 会读取
/etc/profile,然后读取~/.bash_profile、~/.bash_login和~/.profile中第一个存在的用户文件。交互式非登录 shell 通常读取~/.bashrc。登录文件也可能显式 source 它。对于非交互 Bash,还要考虑适用的BASH_ENV。 - 找到赋值处。 在这些文件以及它们 source 的文件中搜索变量名和旧代理主机名。别漏掉相关的
/etc/profile.d片段,也不要只搜大写或只搜小写。 - 如果启动过程没有赋值,就往上追父进程。 shell 从终端、登录会话、服务管理器或开发工具继承环境。长期存活的父进程会在你改过 shell 文件之后仍然保留旧值。
对于基于 PAM 的登录,还要检查 /etc/environment。改正真正拥有它的那处来源,然后重新走一遍受影响的启动路径,必要时刷新父进程的配置。搜索要留在本机:启动文件和环境转储里可能有凭据。要验证的结果是目标命令实际继承到的值,而不是最后一个把它 unset 掉的文件。