Homebrew: Lista tylko zainstalowanych formuł najwyższego poziomu

102

Szukam sposobu, aby wyświetlić tylko te formuły, które zainstalowałem, bez zainstalowanych zależności. Chcę mieć listę wszystkich programów, które faktycznie zainstalowałem, bez szumu zależności.

Wiem o tym, brew listktóra zawiera listę wszystkich zainstalowanych formuł. Wiem też, że brew graphdaje mi wykres zależności wgraphviz

Innymi słowy: chcę mieć minimalny zestaw formuł, aby ponownie zainstalować system.


źródło
brew graph??? Rozumiem Error: Unknown command: graph. Nie ma takiego polecenia.
ikonoklast
brew graphwygląda na to, że jest to pakiet, który możesz zainstalować dla tego github.com/martido/brew-graph , zobacz także blog.jpalardy.com/posts/untangling-your-homebrew-dependencies
netweb

Odpowiedzi:

184

Użycie brew leaves: pokaż zainstalowane formuły, które nie są zależnościami innej zainstalowanej formuły.

Denis Barushev
źródło
1
Dzięki! Jednak pokazuje to mysqltak, jakby nie było to wymagane przez nic, podczas gdy jest to faktycznie wymagane w moim systemie przez mysql-connector-c++. Czy zdarza ci się wiedzieć, czy jest to zamierzone (np. Jeśli brewzachowuje się, które formuły są zainstalowane bezpośrednio, a nie tylko, jeśli jest to zależne, czy nie)?
Haralan Dobrev
2
Och, to istnieje! FWIW można to znaleźć Library/Homebrew/cmd/leaves.rbi zasadniczo robi to, co robi moje rozwiązanie, z wyjątkiem obsługi opcjonalnych / zalecanych zależności ( deps << dep.name if tab.with?(dep.name)). @HaralanDobrev To z pewnością wyjaśnia zachowanie mysqlw twoim systemie i dlaczego wynik różni się od mojego rozwiązania, ale możesz łatwo dostosować się leaves.rbdo swoich upodobań.
Adrian Frühwirth
1
Świetne znalezisko. Używam brew ls --versions $( brew leaves )brew ls --versions $( brew leaves )również do zrzucania wersji.
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

Wydaje się, że daje nam to listę wszystkich zainstalowanych formuł, w tym ich zależności. Możemy zbudować listę wszystkich formuł i listę wszystkich zależności oraz odjąć zależności z listy formuł, co powinno dać nam listę formuł, które nie są zależnościami innych formuł:

$ 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

Czy to jest wynik, którego szukasz?

Adrian Frühwirth
źródło
1
Dziękuję, to działa!
Haralan Dobrev
Dziękuję za scenariusz, ale odpowiedź od Denisa jest lepsza. 1) Jest wbudowany. brewkiedyś takiego polecenia nie było, ale teraz, kiedy już to robi, lepiej jest skorzystać z wbudowanego. 2) Twój skrypt dobrze pokazuje podwojenie obsługi. Na przykład, jeśli zainstalowałem, php55który instaluje homebrew/dupes/zlib, pokaże się, zlibże nie jest to zależność, która nie jest prawdą. Twoje zdrowie!
Haralan Dobrev
Dlaczego nie użyć po prostu cutna wyjściu? Oto jedna linijka:brew deps --installed | cut -d: -f1
mattmc3
@ mattmc3 Ponieważ to nie robi tego samego i nie odpowiada na pytanie / daje wynik, który zadał OP.
Adrian Frühwirth
1
To powinna być akceptowana odpowiedź. Nie uważałem brew leavesza przydatne.
Danyal Aytekin
3

pokazuje to zainstalowane formuły jako drzewo.

brew deps --installed --tree

Y. Özdemir
źródło