↓ 跳过正文
  1. 文章/
  2. 2026 年文章归档/

macOS 终端走代理,命令行环境变量设置

·1193 字·3 分钟
作者
吾便宜

Mac 用户迟早会遇到这个分裂时刻:浏览器里 Google 秒开,切到终端 brew install 却卡到超时。原因很简单——图形界面的系统代理和终端是两套世界,终端里的命令行工具默认根本不走代理。这篇把终端走代理的原理和设置一次讲透。

macOS 终端代理设置

插图来源:Storyset

核心原理:环境变量
#

大多数命令行工具(curl、wget、git、brew、npm、pip)都认三个环境变量:

http_proxy=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890
all_proxy=socks5://127.0.0.1:7890

后面的地址和端口是你代理客户端的本地监听地址。Clash 系客户端默认一般是 127.0.0.1:7890(HTTP)和 127.0.0.1:7891(SOCKS5),具体以你客户端设置里显示的为准,不要照抄,先去客户端里确认。

临时生效:只管当前窗口
#

在终端里直接执行:

export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890

关闭这个终端窗口就失效。适合临时用一次的场景。取消也很简单:unset http_proxy https_proxy all_proxy。

永久生效:写入 shell 配置文件
#

想每次打开终端自动生效,把上面三行写进 shell 的配置文件:

  • 用 zsh(macOS 默认):~/.zshrc
  • 用 bash:~/.bash_profile
# 代理设置
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890
export no_proxy="localhost,127.0.0.1,*.local"

注意 no_proxy 这一行:本地回环地址不要走代理,否则可能引发奇怪的问题。写完后执行 source ~/.zshrc 让它立即生效。

验证:三招确认真的走了代理
#

  1. curl 看 IP:curl -s ipinfo.io 或 curl -s ifconfig.me,返回的 IP 应该是代理节点的 IP;
  2. git 测试:git ls-remote https://github.com 能正常返回引用说明通了;
  3. brew 测试:brew update 不再超时。

如果 curl 通但 git 不通,检查 git 自己的代理配置:git config --global http.proxy 是否和环境变量冲突,冲突时以 git 自身配置优先。

进阶:按需开关
#

不想终端永远走代理?写两个 alias 放进 ~/.zshrc:

alias proxyon='export http_proxy=http://127.0.0.1:7890 https_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890'
alias proxyoff='unset http_proxy https_proxy all_proxy'

之后在终端里敲 proxyon / proxyoff 一键切换,哪个终端窗口需要代理就开哪个,互不干扰。配合这篇食用更佳:Mac 上用快捷键一键切换代理。

常用工具的代理配置差异
#

环境变量是通用方案,但有些工具有自己的代理设置,优先级高于环境变量:

  • git:git config --global http.proxy http://127.0.0.1:7890,取消用 --unset。如果和环境变量冲突,以 git 自身配置为准;
  • npm:npm config set proxy http://127.0.0.1:7890,yarn/pnpm 类似;
  • brew:认环境变量,但偶尔会清环境,sudo -E 可以保留;
  • ssh:走 ~/.ssh/config 里配 ProxyCommand,和环境变量无关;
  • docker:Docker Desktop 在设置里单独配代理,终端环境变量管不到它。

建议:日常用环境变量一把梭,遇到某个工具不通再去查它自己的代理配置,八成是"自有配置覆盖了环境变量"。

常见坑
#

  • 端口写错:每个客户端的监听端口可能不同,复制前先看客户端设置页;
  • 大小写:有些工具只认小写 http_proxy,有些只认大写 HTTP_PROXY,图省事可以大小写各 export 一套;
  • sudo 不继承:sudo 默认不继承用户环境变量,sudo -E 才能带上代理。

相关阅读:ClashX 在 macOS 上的配置全流程、代理客户端安装配置总览

相关文章

iOS 锁屏一键开关代理的两种方法

·1158 字·3 分钟
插图来源:Storyset 每天开关代理好几次,每次都要解锁、找到 App、点进开关,烦。两种一键方案,按需取用。 方案一:控制中心长按 VPN 开关 # 下拉打开控制中心,长按(或重按)左上角的网络模块。 会展开出「VPN」按钮,点一下就能开关系统 VPN。 限制:它开关的是系统 VPN 通道,相当于代理的总闸;如果你用的是 Shadowrocket 这类 App,它能用;但它不能切换节点,也不能切换规则/全局模式。 适合场景:临时需要整个关掉代理(比如用银行 App),点一下就行。 方案二:快捷指令做个切换按钮 # 打开「快捷指令」App,新建快捷指令,添加操作「设定 VPN」(或对应代理 App 提供的操作,如 Shadowrocket 的"切换开关")。 把这个快捷指令添加到桌面小组件或锁屏小组件,一点即切。 进阶:配合「自动化」,设置连上公司 Wi-Fi 自动关代理、连上家里 Wi-Fi 自动开代理。 限制:快捷指令能做的动作取决于 App 是否提供了 Siri 快捷方式支持;部分小众客户端没有,得手动进 App。 两个方案的取舍 # 只想快速"关一下/开一下":用方案一,零配置。 想连切换模式、换节点一起做:用方案二,一次配好天天省事。 提醒:频繁开关可能导致部分 App 的网络状态卡住(比如微信转圈),开关后等几秒再用。 补充 checklist # 确认代理 App 已在系统 VPN 配置里授权(设置 → 通用 → VPN 与设备管理)。 快捷指令用到的 App 操作,先手动进 App 确认开关本身是好的。 自动化触发别设太灵敏(比如"离开家"这类地理围栏可能误触发),建议用连 Wi-Fi 名称触发。 和家人共用设备时,桌面小组件记得放在顺手的位置,不然配了也想不起来用。 相关阅读:全平台客户端配置总览;如果快捷指令里找不到你的客户端,先确认订阅导入成功且 App 正常工作;三种代理模式的区别见规则/全局/直连模式怎么选。