shell脚本批量安装macos开发工具需精准判断环境、稳定安装、明确报错:检测系统架构与shell类型,预检权限,智能安装/跳过homebrew,按芯片类型加载对应路径,分组控制工具安装,自动化配置环境与dotfiles,并强化错误处理与日志反馈。
用 shell 脚本批量安装 macos 开发工具,核心是把重复操作变成可复用、可维护的命令序列。重点不在“写得多”,而在“判得准、装得稳、错得明”——比如检测 homebrew 是否已存在、跳过已安装的 cli 工具、区分 intel 与 apple silicon 的安装路径。
基础环境判断与初始化
脚本开头需确认系统架构、Shell 类型和必要权限。macOS 上推荐用 zsh(默认),但要避免硬编码 /bin/bash;用 arch 命令识别芯片类型,影响某些二进制包(如 Docker Desktop 或特定版本的 Node)是否兼容;sudo -n true 预检管理员权限,避免中途卡住。
- 用
command -v brew &>/dev/null || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安装或跳过 Homebrew - 用
which brew &>/dev/null && eval "$(/opt/homebrew/bin/brew shellenv)"(Apple Silicon)或eval "$(/usr/local/bin/brew shellenv)"(Intel)加载环境变量 - 检查 Xcode Command Line Tools:运行
xcode-select -p &>/dev/null || xcode-select --install,并加短暂停顿等待用户点击安装窗口
按需安装常用开发工具链
不要一股脑全装,而是按类别分组、支持开关控制。例如用变量 INSTALL_NODE=true 控制是否执行 brew install node;对非 Homebrew 工具(如 VS Code、Docker Desktop),用 curl -L 下载 dmg 并自动挂载、拷贝、清理。
- CLI 工具优先走
brew install:git、gh、jq、yq、htop、tree、ripgrep、fzf - 语言运行时用官方推荐方式:Node.js(
brew install node)、Python(brew install python@3.12,避免系统 Python)、Rust(curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y) - GUI 应用用
brew install --cask:visualstudiocode、docker、postman、rectangle、bartender(注意部分 cask 需先启用公证验证:xattr -rd com.apple.quarantine /Applications/AppName.app)
配置文件与环境变量自动化注入
安装只是第一步,让工具真正可用需写入 shell 配置。识别当前 shell($SHELL),追加 PATH 和别名到对应文件(~/.zshrc 或 ~/.bash_profile),避免重复写入。
- 用
grep -q "export PATH.*brew" ~/.zshrc 2>/dev/null || echo 'export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"' >> ~/.zshrc - 为 fzf 自动启用:运行
$(brew --prefix)/opt/fzf/install --all(加--all同时配置 zsh 和 vim) - 生成默认
.gitconfig(含 user.name/email、core.editor、color.ui 等),仅当文件不存在时写入
错误处理与日志反馈
批量执行最怕静默失败。每个关键步骤后加 || { echo "❌ 安装 [工具名] 失败"; exit 1; };用 set -e 全局开启失败退出,但对可选步骤(如 cask 安装)用 || true 容错;最后汇总成功/失败项,输出到 ~/install-log-$(date +%Y%m%d).txt。
- 用
trap 'echo "⚠️ 脚本在第 $LINENO 行中断"; exit 1' ERR捕获未显式处理的错误 - 每步开始前打印
echo "? 正在安装 $TOOL...",让用户感知进度 - 安装完成后运行
brew doctor并提示人工检查结果,不自动修复潜在冲突
不复杂但容易忽略:脚本应设为可执行(chmod +x setup-dev.sh),且首次运行建议加 ./setup-dev.sh --dry-run 参数模拟执行(用 echo 替代真实命令),确认流程无误再正式跑。











