这个是个很好的问题,归根结底是因为 yay 作为 AUR 助手和包构建工具,是运行在用户空间的 Bash 脚本工具,它默认就继承了当前终端的环境变量(包括 HTTP 代理),而不像 dnf、yum 这些系统级工具那样绕过环境变量。
✅ 简单对比:yay vs dnf/yum
| 工具 | 默认是否继承终端代理变量(如 HTTP_PROXY) | 是否系统级服务 | 是否需要配置代理 |
|---|---|---|---|
yay | ✅ 是的,继承环境变量 | ❌ 否(用户空间工具) | 不需要额外配置 |
makepkg | ✅ 是的 | ❌ 否 | 不需要额外配置 |
dnf / yum | ❌ 默认不会继承环境变量 | ✅ 是 | 需要显式配置 proxy= |
apt | ❌ 默认不会自动继承 | ✅ 是 | 需要配置 /etc/apt/apt.conf |
curl(终端) | ✅ 继承(除非用 sudo) | ❌ 否 | 环境变量即可 |
🧠 原因总结
yay是用户空间工具,它内部调用的是curl,git,makepkg, 等,全部都会继承你当前 shell 的环境变量。dnf是系统级包管理器,它不安全地信任用户环境变量可能会有风险(例如被非特权用户恶意设置),所以默认忽略终端变量,必须在配置文件中显式设置代理。
✅ 你可以用 yay 下载 VSCode 吗?
实际上,在 Arch 系下,你完全不需要通过 .rpm 装 VSCode。直接用 yay 安装如下版本即可:
-
微软官方打包的版本(带官方签名):
yay -S visual-studio-code-bin -
开源社区打包的版本(移除了微软遥测):
yay -S code-oss
✅ 如果你确实要在 RHEL/CentOS 上解决代理问题
你只要加一行配置到 /etc/dnf/dnf.conf 中即可:
proxy=http://127.0.0.1:7897
或者临时使用:
sudo dnf --setopt=proxy=http://127.0.0.1:7897 install code