自酿:仅列出已安装的顶级公式


102

我正在寻找一种仅显示我安装的公式而没有安装的依赖项的方法。我想要一个我实际安装的所有程序的列表,而没有所有依赖项的干扰。

我确实知道brew list哪个列出了所有已安装的公式。我也知道这brew graph给了我一个依赖图graphviz

换句话说:我想拥有最少的公式集来重新安装系统。


brew graph??? 我懂了Error: Unknown command: graph。没有这样的命令。
iconoclast

Answers:


179

使用brew leaves:显示不依赖于另一个已安装公式的已安装公式。


1
谢谢!但是,这确实表明mysql它不需要任何东西,而实际上是我的系统上必需的mysql-connector-c++。您是否偶然知道这是否是故意的(例如是否brew仅在是否需要维护时才保留直接安装哪些公式)?
Haralan Dobrev

2
哦,这存在!FWIW可以在Library/Homebrew/cmd/leaves.rb我的解决方案中找到,并且基本上可以完成我的解决方案,除了处理可选/推荐依赖项(deps << dep.name if tab.with?(dep.name))之外。@HaralanDobrev这肯定可以解释系统上的行为mysql以及输出与我的解决方案不同的原因,但是您可以轻松适应leaves.rb自己的喜好。
AdrianFrühwirth2014年

1
很棒的发现。我brew ls --versions $( brew leaves )brew ls --versions $( brew leaves )也用来转储版本。
Mike D

21
$ brew deps --installed
tmux: pkg-config libevent
q:
gdbm:
libxml2:
asciidoc: docbook
libevent:
pkg-config:
pcre:
docbook:
zsh: gdbm pcre
readline:
emacs: pkg-config

这似乎为我们提供了所有已安装公式的列表,包括它们的依赖性。我们可以构建所有公式的列表和所有依赖项的列表,并从公式列表中减去依赖项,这应该为我们提供不是其他公式的依赖项的公式列表:

$ cat brew-root-formulae.sh
#!/bin/sh

brew deps --installed | \
    awk -F'[: ]+' \
    '{
        packages[$1]++
        for (i = 2; i <= NF; i++)
            dependencies[$i]++
    }
    END {
        for (package in packages)
            if (!(package in dependencies))
                print package
    }'

$ ./brew-root-formulae.sh
zsh
asciidoc
libxml2
readline
tmux
q
emacs

这是您追求的输出吗?


1
谢谢,这能完成工作!
Haralan Dobrev 2014年

谢谢您的脚本,但我发现Denis的答案更好。1)它是内置的。brew以前没有这样的命令,但是现在可以使用内置命令了。2)您的脚本确实很好地显示了句柄重复。例如,如果我已经安装了php55哪个安装程序homebrew/dupes/zlib,它将显示zlib它不是依赖关系,这不是正确的。干杯!
Haralan Dobrev

为什么不只cut在输出上使用?这是一个班轮:brew deps --installed | cut -d: -f1
mattmc3

@ mattmc3因为这不会做同样的事情,也不会回答问题/无法回答OP提出的输出。
AdrianFrühwirth,

1
这应该是公认的答案。我没发现brew leaves有用。
Danyal Aytekin,

3

这会将安装的公式显示为树。

Brew Deps-已安装--tree

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.