Homebrew:如何列出已安装的瓶子及其操作系统版本?

Luc*_*ita 4 macos homebrew

我最近将 Mac OS X 升级到了 Yosemite,我想确保我当前安装的每个软件包都是一个 Yosemite 瓶子。

如何列出已安装的瓶子及其操作系统版本,以便最终卸载/安装它们?


编辑Grepping 字符串 "bottled" 将不起作用,因为如果有一个瓶子可用于包,它仍然存在,但您仍然可以从源代码编译。例如,我刚刚从源代码构建了 yasm 并brew info yasm返回:

yasm: stable 1.3.0 (bottled), HEAD
Modular BSD reimplementation of NASM
http://yasm.tortall.net/
/usr/local/Cellar/yasm/1.3.0 (44 files, 3.3M) *
  Built from source
[...]
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 5

列出所有瓶装公式的最快方法是直接查询JSON 输出brew info --json(这需要jq):

brew info --json=v1 --installed | jq -r "map(select(.installed[].poured_from_bottle) | .name) | unique | .[]"
Run Code Online (Sandbox Code Playgroud)

在这里,brew info --json=v1 --installed为所有已安装的公式提供 JSON 格式的信息。jq处理这个(不带参数使用它来美化输出)。select(.installed[].poured_from_bottle)选择至少安装了一个瓶装版本的每个公式,并map(... | .name)返回关联的名称。| unique确保在安装了多个瓶装版本的情况下,公式名称仅返回一次,| .[]将返回的名称数组分解为一个列表,每个列表都在单独的行中,并且-r从 JSON 输出中去除引号,留下格式可以传递给其他 shell 命令。

每次记住这有点复杂,但是您可以将此命令放入 shell 脚本中:

#!/bin/bash

#:  * `bottled` [<options>]:
#:
#:  List all bottled formulae which are currently installed.
#:
#:          --versions                   Show the version number for bottled 
#:                                       formulae
#:      -h, --help                       Show this message.
#:
#:  (`brew bottled` requires `jq`. Use `brew install jq` to install.)

if type jq &>/dev/null; then
  case $1 in
    --versions)
      brew info --json=v1 --installed | \
        jq -r "map(select(.installed[].poured_from_bottle) | .name + \" \" + .installed[].version) | .[]"
      ;;
    *)
      brew info --json=v1 --installed | \
        jq -r "map(select(.installed[].poured_from_bottle) | .name) | unique | .[]"
      ;;
  esac
  exit $?
else
  echo '`brew bottled` requires jq. Use `brew install jq` to install.'
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

调用它brew-bottled,使其可执行(chmod a+x brew-bottled)并将其放置在您的路径中的某个位置(例如/usr/local/bin)。现在,你可以把它作为一个外部命令brew bottled列出您瓶装公式。(作为额外的奖励,--versions转换将包括版本信息,类似于brew list --versions,包括同一配方的多个瓶装版本。)

因此,如果您想从源头重建所有瓶装公式,则可以将其通过管道传输到xargs

brew-bottled | xargs brew reinstall -s
Run Code Online (Sandbox Code Playgroud)

(离开-s以简单地重新安装当前的操作系统瓶。)

不幸的是,似乎无法确定当前安装的是哪个 macOS 版本的瓶子,因此您需要重新安装所有瓶装公式以确保。