成熟脚本如omakos、mac-dev-playbook等提供模块化、幂等、可定制的完整方案,核心是构建配置系统而非罗列命令:需支持检测跳过、依赖管理、权限适配、错误隔离与日志反馈,并妥善处理xcode工具安装、未公证应用授权、shell切换、字体缓存等macos特有细节。
直接用现成的成熟脚本更省心,比如 omakos、mac-dev-playbook 或 macos-cur。它们不是简单罗列命令,而是模块化、幂等、可定制的完整方案——你不需要从零写,重点是选好、调好、用好。
核心思路:别写“安装列表”,要建“配置系统”
手动写一个 brew install git && brew install node 的脚本只是入门;真正实用的自动化脚本需解决这几个问题:
- 检测与跳过:已装 Git 就不重装,已配 SSH 密钥就跳过生成步骤
- 依赖顺序管理:先装 Homebrew,再装依赖它的工具(如 Mise、Docker Desktop)
- 权限与安全适配:自动申请“完全磁盘访问”“辅助功能”等 macOS 特有权限(尤其对 OpenClaw、Raycast 等工具)
- 错误隔离:某个组件失败(如 Docker 安装卡住),不影响其他工具继续安装
- 日志与反馈:记录每步耗时、成功/失败状态,最后输出汇总表(如“共 27 项,25 成功,2 跳过”)
关键组件怎么写才可靠
以三个高频需求为例,给出实操要点:
- Homebrew 安装:必须加超时和重试逻辑,避免因网络波动失败;检查 /opt/homebrew(Apple Silicon)或 /usr/local/bin/brew(Intel)路径是否存在,再决定是否安装
- 开发运行时(Python/Node/Go):推荐用 Mise(替代 asdf/nvm/pyenv)统一管理,脚本只需运行 mise install && mise use --global node@latest,无需单独处理 PATH 和版本冲突
- GUI 应用(Cursor/Obsidian/Raycast):用 brew tap homebrew/cask-versions && brew install --cask cursor,同时加 post-install 步骤——比如自动打开 Raycast 并启用「Terminal」插件(通过 osascript 调用 AppleScript)
避开 macOS 特有坑
这些细节不处理,脚本在新机器上大概率卡住或失效:
- Xcode 命令行工具必须最先安装:
xcode-select --install,且要等用户点击弹窗确认(无法静默),建议脚本开头加提示 - macOS Sequoia/Sonoma 默认禁用未公证应用,安装 cask 类软件前需先执行:
sudo spctl --master-disable(仅首次) - 终端配置(zsh + Powerlevel10k)不能只改 ~/.zshrc,还要确保
chsh -s $(which zsh)切换默认 shell,否则重启终端后不生效 - 字体安装(如 JetBrains Mono、Fira Code)需复制到 ~/Library/Fonts/ 并刷新缓存:
fc-cache -fv
怎么让它真正“能用”
一个脚本能跑通不等于它好用。实际落地建议:
- 把所有脚本拆成独立文件(brew.sh、git.sh、macos-settings.sh),主脚本 setup.sh 只负责调用顺序和错误汇总
- 用 config.yml 或 .env 控制开关:比如
INSTALL_DOCKER: false就跳过 Docker 相关步骤 - 每次运行前自动备份旧配置:
mv ~/.gitconfig{,.bak-$(date +%s)} - 支持断点续跑:用 lock 文件 + 日志标记,中断后可从某一步 resume,不用重来











