Homebrew: Chỉ liệt kê các công thức cấp cao nhất đã cài đặt


102

Tôi đang tìm cách để chỉ hiển thị các công thức tôi đã cài đặt mà không có phần phụ thuộc đã cài đặt. Tôi muốn có một danh sách tất cả các chương trình tôi đã thực sự cài đặt, không có tiếng ồn của các phần phụ thuộc.

Tôi biết về brew listdanh sách tất cả các công thức đã cài đặt. Tôi cũng biết điều đó brew graphcung cấp cho tôi một biểu đồ phụ thuộc tronggraphviz

Hay nói cách khác: Tôi muốn có bộ công thức tối thiểu để cài đặt lại hệ thống của mình.


brew graph??? Tôi hiểu Error: Unknown command: graph. Không có lệnh như vậy.
iconoclast

brew graphdường như là một gói bạn có thể cài đặt cho github.com/martido/brew-graph này , xem thêm blog.jpalardy.com/posts/untangling-your-homebrew-dependencies
netweb

Câu trả lời:


179

Sử dụng brew leaves: hiển thị các công thức đã cài đặt không phải là phụ thuộc của một công thức đã cài đặt khác.


1
Cảm ơn! Tuy nhiên, điều này hiển thị mysqlnhư thể nó không được yêu cầu bởi bất kỳ thứ gì trong khi nó thực sự được yêu cầu trên hệ thống của tôi bởi mysql-connector-c++. Bạn có biết điều này là cố ý hay không (chẳng hạn như brewviệc giữ lại công thức nào được cài đặt trực tiếp chứ không chỉ khi đó là lỗi hay không)?
Haralan Dobrev

2
Ồ, điều này tồn tại! FWIW điều này có thể được tìm thấy trong Library/Homebrew/cmd/leaves.rbvà về cơ bản thực hiện những gì giải pháp của tôi thực hiện ngoại trừ việc xử lý các phụ thuộc tùy chọn / được đề xuất ( deps << dep.name if tab.with?(dep.name)). @HaralanDobrev Điều này chắc chắn giải thích rõ nhất hành vi liên quan đến mysqlhệ thống của bạn và tại sao đầu ra khác với giải pháp của tôi, nhưng bạn có thể dễ dàng điều chỉnh leaves.rbtheo ý thích của mình.
Adrian Frühwirth

1
Tìm thấy tuyệt vời. Tôi cũng sử dụng brew ls --versions $( brew leaves )brew ls --versions $( brew leaves )để kết xuất các phiên bản.
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

Điều này dường như cung cấp cho chúng tôi danh sách tất cả các công thức đã cài đặt bao gồm cả các phụ thuộc của chúng. Chúng ta có thể tạo danh sách tất cả các công thức và danh sách tất cả các phụ thuộc và trừ các phụ thuộc khỏi danh sách các công thức, điều này sẽ cung cấp cho chúng tôi danh sách các công thức không phải là phụ thuộc của các công thức khác:

$ 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

Đây có phải là đầu ra bạn đang theo đuổi?


1
Cảm ơn bạn, điều này thực hiện công việc!
Haralan Dobrev

Cảm ơn vì kịch bản của bạn, nhưng tôi thấy câu trả lời từ Denis hay hơn. 1) Nó được tích hợp sẵn. brewtrước đây không có lệnh như vậy, nhưng bây giờ có lệnh này thì tốt hơn nên sử dụng lệnh tích hợp sẵn. 2) Bạn kịch bản hiển thị xử lý tốt các bản lừa đảo. Ví dụ: nếu tôi đã cài đặt php55, cài đặt homebrew/dupes/zlibnào thì nó sẽ hiển thị zlibnhư thể nó không phải là phụ thuộc, điều này không đúng. Chúc mừng!
Haralan Dobrev

Tại sao không chỉ sử dụng cuttrên đầu ra? Đây là một lớp lót:brew deps --installed | cut -d: -f1
mattmc3

@ mattmc3 Bởi vì điều đó không làm điều tương tự và không trả lời câu hỏi / mang lại kết quả mà OP đã yêu cầu.
Adrian Frühwirth

1
Đây phải là câu trả lời được chấp nhận. Tôi không thấy brew leaveshữu ích.
Danyal Aytekin

3

điều này hiển thị các công thức đã cài đặt dưới dạng cây.

chương trình pha cà phê - đã cài đặt --tree

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.