macOS 中“一键式网络预设”应基于原生“网络位置”实现,用 networksetup -switchlocation 切换并自动识别活跃接口名,避免硬编码服务名;多语言下需规范命名、LANG=C 控制输出,脚本可按 AppleLanguages 自动适配中英文提示。
在 macos 中实现多语言环境下的“一键式网络预设”,核心不是让语言和网络绑定,而是把网络配置(代理、dns、位置)封装成可快速切换的脚本或位置,并确保语言设置不干扰其运行。关键在于分离关注点:语言是系统界面与输入法偏好,网络是底层服务配置;两者互不依赖,但可以共存协同。
用 networksetup + 网络位置实现真正的“一键网络预设”
macOS 原生支持“网络位置”(Location),每个位置可独立保存 Wi-Fi/Ethernet 的 DNS、代理、IP 模式等全部参数。这是最稳定、无需第三方、重启不丢失的方案。
- 先在图形界面创建多个位置:如“办公-代理”“家庭-直连”“开发-本地DNS”,每个位置下为当前常用服务(如 Wi-Fi)配好对应参数
- 终端一键切换:
networksetup -switchlocation "办公-代理",切换后所有网络设置(包括已设好的 PAC 或 HTTP 代理、DNS 服务器、绕过列表)立即生效 - 切换后建议补一句
sudo dscacheutil -flushcache刷新 DNS 缓存,避免旧解析残留
代理预设需动态适配活跃网络服务名
硬编码 “Wi-Fi” 在 USB 共享、网线接入时会失败。脚本必须自动识别当前出口服务,否则一键就静默失效。
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
- 用
route -n get default 2>/dev/null | grep 'interface:' | awk '{print $2}'获取真实接口名(如 en0、en1、bridge0) - 再通过
networksetup -listnetworkserviceorder映射到服务名(如 “Wi-Fi”“iPhone USB”“Ethernet”) - 设置代理时统一走
networksetup -setwebproxy "$SERVICE" 127.0.0.1 8080,并用-setproxybypassdomains补全 .local、192.168.*、10.* 等 macOS 内置绕过项
多语言环境下保持脚本与配置兼容
语言设置本身不影响 networksetup 执行,但要注意两点:
- 脚本中避免使用中文路径或空格未转义的服务名(如 “办公室 Wi-Fi” 建议改用 “Office-WiFi”)
- 若脚本含提示文字(如 echo 输出),可用
LANG=C临时固定输出语言,避免中文终端显示乱码或截断 - 用户语言设置(如简体中文界面)完全不影响 networksetup 读写配置,无需额外处理
进阶:为不同语言用户准备带提示的菜单脚本
可写一个交互式 shell 脚本,根据当前系统语言自动显示中/英文提示,再调用 networksetup 切换位置或代理。
- 用
defaults read -g AppleLanguages | head -1 | tr -d '[" ]'获取首选语言代码(如 zh-Hans、en) - 按语言代码加载对应提示文案,再执行
networksetup -switchlocation或代理命令 - 配合
osascript -e 'display notification ...'弹出成功提示,视觉反馈更友好

















