临时清除代理环境变量:让命令行程序临时直连网络
临时清除代理环境变量:让命令行程序临时直连网络
有时候一个命令行程序明明网络本身没问题,却一直连接失败、超时,或者走到了不该走的代理节点。常见原因之一是:当前终端继承了 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 等代理环境变量。
这篇文章整理一个实用小技巧:只在当前终端窗口里临时清除代理环境变量,不改系统代理设置,也不影响其他终端窗口。适合用来排查 GA、Python 脚本、Node 工具、Git/CLI 工具的网络问题。
什么时候需要这样做?
你可以在这些场景下尝试临时清代理:
- 某个 CLI 程序总是连接到错误代理。
- 程序报
connection refused、proxy error、timeout,但直连网络其实可用。 - 你想判断问题到底来自程序本身,还是来自终端里的代理环境变量。
- 同一台机器上,浏览器能访问,但命令行工具访问失败。
- 启动 GA、Python 脚本或开发服务时,希望它们临时不继承代理。
先检查当前终端是否存在代理变量:
env | grep -i proxy如果能看到类似下面的输出,就说明当前 shell 环境里确实设置了代理:
HTTP_PROXY=http://127.0.0.1:7890HTTPS_PROXY=http://127.0.0.1:7890ALL_PROXY=socks5://127.0.0.1:7890macOS / Ubuntu / Linux:当前终端临时清除
如果你使用的是 bash 或 zsh,可以执行:
unset HTTP_PROXY HTTPS_PROXY ALL_PROXYunset http_proxy https_proxy all_proxyunset NO_PROXY no_proxy如果不想影响当前 shell 里的变量,只想让某一条命令单次不走代理,也可以用 env -u 配合 NO_PROXY='*' 一次性搞定,比如启动 ga-tui2:
cd /Users/a11/2026/2026511-611/GenericAgentenv -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \ -u http_proxy -u https_proxy -u all_proxy \ NO_PROXY='*' no_proxy='*' \ ga-tui2经过我的验证,这个指令能更彻底地清理代理,包括 ga 里面模型调用那一层的网络代理。
然后检查是否清掉:
env | grep -i proxy如果没有输出,说明当前终端里的代理环境变量已经清空。
接着在这个终端里启动你的程序,例如:
ga或:
python3 main.py注意:这个操作只影响当前终端会话。关闭终端之后,系统配置不会被修改;重新打开一个终端,也可能重新读取 shell 配置里的代理设置。
macOS / Ubuntu:单次启动某个程序不走代理
有时你不想改变当前 shell,只想让某一个命令在启动时不继承代理环境变量,可以使用 env -u:
env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \ -u http_proxy -u https_proxy -u all_proxy \ -u NO_PROXY -u no_proxy \ ga如果启动的是 Python 程序:
env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \ -u http_proxy -u https_proxy -u all_proxy \ -u NO_PROXY -u no_proxy \ python3 main.py这种方式的好处是:只影响这一条命令。命令结束后,当前终端原本的环境变量仍然保留。
Windows:不要只删代理变量,关键是设置 NO_PROXY=*
Windows 这里有一个很容易踩坑的点:只删除 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 等环境变量,并不一定能让 Python、GA 或某些 CLI 直连。
原因是 Windows 还有“系统代理”这一层。有些库(例如 Python urllib / requests 相关链路)在环境变量被删掉后,仍可能从 Windows 系统代理里读到类似 127.0.0.1:7897 的代理配置。
刚刚实测结果是:
- 只删除
HTTP_PROXY/HTTPS_PROXY/ALL_PROXY:仍可能读取 Windows 系统代理127.0.0.1:7897。 - 设置
NO_PROXY=*/no_proxy=*后:urllib.getproxies()不再返回系统代理。 - GA / Python 请求会尝试直连;如果直连失败,反而说明它确实没有再走代理。
所以在 Windows 上,如果目标是“不改全局 Windows 系统代理,只让当前终端或当前 GA 会话尽量直连”,推荐设置 NO_PROXY=*。
Windows PowerShell:当前窗口之后都尽量直连
如果你已经在一个 PowerShell 终端里,希望这个终端之后启动的所有程序都不走系统代理,可以执行:
Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:http_proxy, Env:https_proxy, Env:all_proxy -ErrorAction SilentlyContinue$env:NO_PROXY='*'$env:no_proxy='*'然后再运行:
ga或者:
python main.py注意:这里不是删除 NO_PROXY,而是把它设置成 *。这通常表示“所有目标都不走代理”。
Windows PowerShell:只让这一次 GA 启动直连
如果你只想启动一个临时的 GA 会话,不想影响别的 PowerShell 窗口,可以这样启动:
powershell -NoProfile -Command "Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:http_proxy, Env:https_proxy, Env:all_proxy -ErrorAction SilentlyContinue; $env:NO_PROXY='*'; $env:no_proxy='*'; ga"更短版本是:
powershell -NoProfile -Command "$env:NO_PROXY='*'; $env:no_proxy='*'; ga"如果启动的是 Python 程序,也可以写成:
powershell -NoProfile -Command "Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:http_proxy, Env:https_proxy, Env:all_proxy -ErrorAction SilentlyContinue; $env:NO_PROXY='*'; $env:no_proxy='*'; python main.py"这些命令只影响当前 PowerShell 进程以及它启动的子进程,不会关闭 Windows 全局系统代理。浏览器如果不是从这个终端启动,一般也不会受影响。
Windows PowerShell:做一个 ga-direct 别名
如果经常需要让 GA 尽量直连,可以在 PowerShell 里建一个函数:
function ga-direct { Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:http_proxy, Env:https_proxy, Env:all_proxy -ErrorAction SilentlyContinue $env:NO_PROXY='*' $env:no_proxy='*' ga}之后输入:
ga-direct即可让这个 GA 会话尽量直连、不走系统代理。
Windows CMD:同样要设置 NO_PROXY=*
如果你使用的是 CMD,也不要只把代理变量清空;建议同时设置 NO_PROXY=*:
set HTTP_PROXY=set HTTPS_PROXY=set ALL_PROXY=set http_proxy=set https_proxy=set all_proxy=set NO_PROXY=*set no_proxy=*然后启动:
ga或者:
python main.py单次启动可以写成一行:
cmd /C "set HTTP_PROXY=& set HTTPS_PROXY=& set ALL_PROXY=& set http_proxy=& set https_proxy=& set all_proxy=& set NO_PROXY=*& set no_proxy=*& ga"不是所有软件都尊重 NO_PROXY=*,但 Python requests / urllib 这一类通常会尊重;刚刚已经在 GA 当前 Python 环境里验证过。
两个重要提醒
1. 已经启动的程序不会受影响
环境变量是在程序启动时继承的。也就是说,如果 GA、Python 服务或某个开发服务器已经在运行,你在另一个终端里清代理,并不会改变它们的网络行为。
正确做法是:
- 退出已经启动的程序。
- 在清掉代理变量后的终端里重新启动。
- 再观察问题是否复现。
2. 清环境变量不等于关闭所有代理
这些命令只清除环境变量层面的代理。
如果你使用的是 Clash、V2RayN、Surge、TUN 模式、全局 VPN、公司 VPN,或者系统级网络接管,那么清除 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 可能还不够。此时需要到代理软件里切换规则,例如设置 DIRECT,或者临时关闭 TUN / 全局代理。
建议的排查顺序
遇到 CLI 网络异常时,可以按下面顺序判断:
env | grep -i proxy或gci env:*proxy*,确认当前环境有没有代理变量。- macOS / Linux 先临时清掉当前终端代理变量;Windows 还要设置
NO_PROXY=*/no_proxy=*。 - 在同一个终端里重新启动程序。
- 如果问题消失,说明原先很可能是环境变量代理导致。
- 如果问题仍然存在,再检查系统代理、代理软件、DNS、目标服务状态或程序配置。
这个方法的优点是可逆、低风险、不会改系统设置,非常适合做第一步网络排查。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!





