macOS终端中环境变量与网络预设属两套独立机制:环境变量由shell启动流程和launchd控制,网络预设由networksetup/scutil写入系统配置库,二者不互通、不互触,需分别配置并注意作用域差异。
在 macos 终端中管理环境变量与网络预设,本质是分两套独立机制:环境变量靠 shell 启动流程和 launchd 传递控制;网络预设(位置、dns、代理)则由系统服务 networksetup 和 scutil 直接写入配置数据库。两者不互通,也不能互相触发生效,需分别操作并注意作用范围。
查看与设置当前 Shell 环境变量
环境变量只对当前 shell 及其启动的子进程有效。常用命令:
-
printenv或env:列出所有已加载的环境变量 -
echo $PATH:查看特定变量(如 PATH)值 -
export MY_VAR="value":临时设置,关闭终端即失效 -
unset MY_VAR:临时清除变量
若想持久化,需写入对应 shell 的配置文件(Zsh 默认为 ~/.zshrc),例如:
全局环境变量(跨 Shell、GUI 应用生效)
仅靠 .zshrc 无法让 Finder、VS Code 图形界面或 LaunchPad 启动的应用读取变量。必须通过 launchd 注入:
- 创建脚本
~/bin/set-system-envs,内容为:
#!/bin/bash
launchctl setenv JAVA_HOME "/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home"
launchctl setenv PATH "/opt/homebrew/bin:$PATH" - 赋予可执行权限:
chmod +x ~/bin/set-system-envs - 运行一次:
~/bin/set-system-envs - 重启图形界面(或注销再登录)后,GUI 应用才能读取这些变量
注意:launchctl setenv 不影响当前终端会话,只影响后续由系统启动的进程。
管理网络位置与 DNS 预设
macOS 的“网络位置”是完整网络配置快照(含 IP、DNS、代理、服务启停状态)。终端完全可控:
-
networksetup -getcurrentlocation:查看当前激活的位置 -
networksetup -listlocations:列出所有已建位置(如“自动”“办公室”) -
networksetup -switchlocation "开发环境":立即切换位置 -
networksetup -listallnetworkservices:查看该位置下启用的服务名(如 “Wi-Fi”、“USB 10/100/1000 LAN”) -
networksetup -setdnsservers "Wi-Fi" 223.5.5.5 114.114.114.114:为指定服务设 DNS -
networksetup -setdnsservers "Wi-Fi" empty:清空 DNS(恢复 DHCP 分配) -
networksetup -getdnsservers "Wi-Fi":验证是否写入成功
切换位置后,DNS 设置不会自动生效——需刷新系统 DNS 缓存:
sudo dscacheutil -flushcache && sudo killall -HUP mDNSResponder
同步系统代理到终端环境变量
macOS 图形界面中设置的 HTTP/HTTPS/SOCKS 代理,终端默认不感知。可用 scutil --proxy 提取并转为环境变量:
- 提取并导出为当前会话变量:
eval $(scutil --proxy | awk '/HTTPProxy/{http=$3} /HTTPPort/{port=$3} /HTTPEnable.*1/{print "export HTTP_PROXY=http://",http,":",port; print "export http_proxy=http://",http,":",port}')
eval $(scutil --proxy | awk '/HTTPSEnable.*1/{print "export HTTPS_PROXY=http://",http,":",port; print "export https_proxy=http://",http,":",port}')
eval $(scutil --proxy | awk '/SOCKSEnable.*1/{print "export ALL_PROXY=socks5://",http,":",port; print "export all_proxy=socks5://",http,":",port}') - 如需开机自动同步,可将上述逻辑封装为函数,加入
~/.zshrc并在每次打开终端时运行
这样,curl、wget、git 等工具就能自动走系统代理,无需手动加 -x 参数。


















