终端、命令行不走 Clash 代理怎么办
命令行工具一般不读系统代理,所以终端里的 curl、git、npm 不走 Clash。说明怎么设置 http_proxy、https_proxy 等环境变量,或开启 TUN 模式,附各系统的写法。
你看到的现象
浏览器已经能正常走代理,但在终端里执行 git clone、npm install、curl 等命令时连接超时,或者明显没有走代理。
可能的原因和解决办法
终端没有设置代理环境变量
怎么判断:系统代理主要给浏览器等图形程序用,很多命令行工具不读它,而是读 http_proxy、https_proxy、all_proxy 这些环境变量。在终端里执行 echo $https_proxy(PowerShell 用 $env:HTTPS_PROXY),没有输出就是没设置。
怎么解决:用客户端自带的“复制”功能,粘贴到终端里执行:
- Clash Verge Rev:托盘菜单里的“复制环境变量”。macOS、Linux 上默认复制的是 bash 格式,例如
export https_proxy=http://127.0.0.1:7897 http_proxy=http://127.0.0.1:7897 all_proxy=socks5://127.0.0.1:7897;Windows 上默认是 PowerShell 格式。设置里的“复制环境变量类型”可以改成 cmd、fish 等格式。 - FlClash:有“复制环境变量”。
- ClashX Meta:菜单栏里的“复制终端代理命令”。
端口以你客户端里显示的为准。环境变量只对当前这个终端窗口有效,新开的窗口要重新执行;想长期生效,写进 shell 的配置文件,具体做法见 让终端和开发工具走代理。
用错了测试命令
怎么判断:用 ping 测试代理。ping 用的是 ICMP 协议,不经过 HTTP 或 SOCKS 代理,所以开了代理也 ping 不通。
怎么解决:用 curl 测试,例如 curl -I https://www.gstatic.com/generate_204,返回的第一行里有状态码 204 就说明能连上。
工具有自己的代理设置
怎么判断:环境变量设了,个别工具还是不走代理。有些工具有单独的代理配置,或者不支持某种代理协议。
怎么解决:按工具的官方文档设置代理。Git、npm 等常用工具的设置方法见 让终端和开发工具走代理。
想一次性让所有程序都走代理
怎么判断:要设置的工具太多,或者有程序完全不支持代理设置。
怎么解决:打开客户端的 TUN 模式(虚拟网卡),所有程序的流量都会经过客户端,不需要逐个设置。见 TUN 模式是什么。
常见问题
Windows 的 cmd 和 PowerShell 写法一样吗?
不一样。cmd 用 set https_proxy=http://127.0.0.1:端口,PowerShell 用 $env:HTTPS_PROXY="http://127.0.0.1:端口"。Clash Verge Rev 的“复制环境变量类型”选对应的格式即可。
还是没解决?
把客户端名称、版本和完整的报错信息发给我们(不要包含订阅链接),我们会补充到这一页。提交反馈