7.1 实用技巧精选

原文链接: https://docs.brew.sh/Tips-and-Tricks

安装旧版本 formula

homebrew/core 中的部分 formula 以“版本化 formula”形式提供,命名形如 gcc@9、python@3.11。先搜索是否存在需要的版本:

1
2
brew search gcc@
brew install gcc@9

找不到你需要的具体版本时,可参考官方 Locking installed formulae at specific versions。请记住 Homebrew 是滚动发布,并不保证任意旧版本都可安装。

快速让软件从 PATH 中“消失”

某个软件与正在构建的项目不兼容时,可以先解除链接:

1
brew unlink <formula>

之后想恢复,再链接回来:

1
brew link <formula>

预先下载 formula 的文件

有时用 HTTP 之外的渠道下载更快。Homebrew 的下载会保存在缓存目录的 downloads 子目录中,文件名形如 <url-hash>--<formula>-<version>。先查看预期缓存路径:

1
brew --cache --build-from-source <formula>

手动下载完成后,把文件移动过去:

1
mv the_tarball "$(brew --cache --build-from-source <formula>)"

更省事的办法是直接让 brew 预下载:

1
brew fetch <formula>

它会同时显示文件的 SHA-256 哈希,对更新 formula 版本也很方便。

没有 Xcode CLT 时安装需要编译的软件

进入 brew 环境后再用其他语言工具链安装依赖:

1
2
brew sh   # 等价于 eval "$(brew --env)"
gem install ronn

brew sh 会把 brew 的环境变量导入当前 shell,gem 等工具能据此找到编译所需的设置;brew 自动选定的优化参数也会一并生效。

只安装依赖而不安装 formula 本体

1
brew install --only-dependencies <formula>

适合你想自己编译、却希望依赖由 brew 提供的情形。

用 brew exec 在脚本中临时使用工具

brew exec 可以为一条命令安装所需 formula,并把它们的可执行目录临时放进 PATH:

1
brew exec --formulae=jq,yq -- ./script.sh

--formulae 后跟逗号分隔的 formula 列表,-- 之后是要执行的命令及其参数。缺失的 formula 会被自动安装;bin、sbin 以及对应依赖路径会被前置到 PATH。命令也可以是路径,很适合便携脚本、演示与 CI 引导代码——不必为此写 Brewfile。

支持 env -S 的系统还能在 shebang 中声明:

1
#!/usr/bin/env -S brew exec --formulae=jq,yq --

进入交互式 Homebrew shell

1
brew irb

会进入 brew(main):001> 这样的交互环境,可查看示例:

1
brew irb --examples

例如查看某个 formula 对象可用哪些方法:

1
Formulary.factory("ace").methods - Object.methods

隐藏啤酒杯 emoji

1
export HOMEBREW_NO_EMOJI=1

也可以把完成时显示的啤酒杯替换成自己喜欢的字符:

1
export HOMEBREW_INSTALL_BADGE="☕️ 🐸"

迁移整台 Homebrew 环境

官方推荐的方式就是 Brewfile:

1
2
brew bundle dump    # 在旧机器导出
brew bundle install # 在新机器导入

详见 6.2 用 brew bundle 管理机器状态。

为 brew 定义别名

brew alias 类似 shell 的 alias,用于定义执行其他 brew 命令或 shell 命令的自定义命令:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 添加别名:`brew ug` 等价于 `brew upgrade`
brew alias ug='upgrade'
brew alias i='install'

# 列出所有别名
brew alias

# 查看单个别名
brew alias i

# 像普通命令一样使用
brew i git

# 删除别名
brew unalias i

# 别名可以互相引用:`brew print git` 会执行 `brew info git`
brew alias show='info'
brew alias print='show'

规则要点:

  • 内置 brew 命令名不能用作别名;
  • 别名默认补上 brew 前缀;以 ! 或 % 开头则不补:
    • brew alias status='!git status' 使 brew status 执行 git status;
    • % 前缀用于 shell 展开,例如保留局部变量;
  • 需要 ! 时建议用单引号防止 shell 解释;
  • 用 --edit 在 $EDITOR 中编辑别名:
1
2
brew alias --edit foo
brew alias --edit

编辑器插件

  • Visual Studio Code:Brewfile 提供 Ruby 语法高亮;Brew Services 可启停 Homebrew 服务;
  • Vim:brew.vim 为内联补丁提供高亮;
  • Emacs:homebrew-mode 提供补丁高亮与辅助函数,pcmpl-homebrew 提供补全。

让 macOS 终端支持右键“Open man Page”

在 macOS 的“终端”中右键命令名并选择“Open man Page”可以快速查看手册。因为终端不加载 ~/.zshrc 等 dotfiles,需要给它额外的 man 路径提示:

1
2
sudo mkdir -p /usr/local/etc/man.d
echo "MANPATH $(brew --prefix)/share/man" | sudo tee -a /usr/local/etc/man.d/homebrew.man.conf

Intel Mac 上之后还需要修复权限:

1
sudo chown -R "${USER}" /usr/local/etc

使用缓存代理或镜像

brew 支持通过环境变量从缓存代理或镜像获取 bottle 与 JSON API。以 https://artifacts.example.com 的 JFrog Artifactory 为例:

1
2
3
4
export HOMEBREW_API_DOMAIN=https://artifacts.example.com/artifactory/homebrew-formulae-api
export HOMEBREW_ARTIFACT_DOMAIN=https://artifacts.example.com/artifactory/homebrew
export HOMEBREW_ARTIFACT_DOMAIN_NO_FALLBACK=1
export HOMEBREW_DOCKER_REGISTRY_BASIC_AUTH_TOKEN="$(printf 'anonymous:' | base64)"

部分制品仓库不支持匿名显式认证(例如 Sonatype Nexus),可设置:

1
export HOMEBREW_DOCKER_REGISTRY_BASIC_AUTH_TOKEN=none

也可以在安装前用 HOMEBREW_BREW_GIT_REMOTE 指向 Homebrew/brew 的内部镜像(见 2.2 安装后的环境配置与高级安装选项)。国内网络环境下,这是加速 brew 下载的常见做法;请务必只使用可信镜像。

在 macOS/Linux 共用同一份 dotfiles

想在不同操作系统使用相同的 shell 初始化文件时,可以检测 brew 安装目录并按需加载:

1
2
command -v brew || export PATH="/opt/homebrew/bin:/home/linuxbrew/.linuxbrew/bin:/usr/local/bin"
command -v brew && eval "$(brew shellenv)"

第一行在尚未加载 brew 时把三种平台的候选目录放进 PATH,第二行找到 brew 后正确初始化环境。