569 Stimmen

Deinstallieren/Entfernen eines Homebrew-Pakets mit all seinen Abhängigkeiten

Ich habe eine Selbstgebrautes Formel, die ich zusammen mit all ihren Abhängigkeiten deinstallieren/entfernen möchte, wobei Pakete übersprungen werden, von denen andere Pakete abhängen (z.B. Kaskadierte Paketentfernung im Sprachgebrauch der Paketverwaltung).

z.B.. Paket deinstallieren a die von folgenden Paketen abhängt b & c , wobei Paket d hängt auch vom Paket c . Das Ergebnis sollte beide deinstallieren a & b , Überspringen c .

Wie kann ich das tun?

Es muss eine Möglichkeit geben, ein Paket zu deinstallieren, ohne unnötige Schrott hinten.

26 Stimmen

Ist das nicht das, was jeder Paketmanager, der diesen Namen verdient, von Haus aus tun sollte? LOL

28 Stimmen

Ab 2021, brew autoremove ist das, wonach Sie suchen:

1voto

Cyrus Punkte 8009

Leicht verfeinert; kann mehrere Pakete liefern; hat Verwendung, wenn keine geliefert werden.

#!/bin/bash
# Removes the package and all dependancies.

if [ $# -eq 0 ]; then
   echo "$(basename $0) <pkg> [<pkg> [...]]"
   exit 1
fi

function tree() {
    pkg="$1"
    join <(brew leaves) <(sort <(brew deps ${pkg}; echo ${pkg}))
} 

let e=0
for pkg in "$@"; do
    printf "Purging %s and its dependencies...\n" "${pkg}"
    deps=( $(tree ${pkg}) )
    while (( ${#deps[@]} > 0 )); do
        brew rm "${deps[@]}"
        deps=( $(tree ${pkg}) )
    done
done

0voto

freytag Punkte 4564

Die Antwort von @jfmercer muss leicht modifiziert werden, damit sie mit dem aktuellen Gebräu funktioniert, denn die Ausgabe von brew missing hat sich geändert:

brew deps [FORMULA] | xargs brew remove --ignore-dependencies && brew missing | cut -f1 -d: | xargs brew install

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X