Ermitteln Sie, ob das Homebrew-Paket installiert ist

104

Ich bin dabei, ein Shell-Skript zu schreiben, um festzustellen, ob mehrere Homebrew-Pakete im System installiert sind. Gibt es eine Möglichkeit, einen Braubefehl zu verwenden, um dies zu erreichen?

Ich habe versucht, den Exit-Code von zu verwenden brew install <formula> --dry-run. Dies erstellt jedoch das Paket, wenn es fehlt.

iltempo
quelle
brew --cellar "$formula" >/dev/null 2>&1 --cellar formula: Display the location in the cellar where formula would be installed, without any sort of versioned directory as the last path. Manpage brauen ; hätte es gerne als Antwort gegeben
166_MMX
if [ ! -x "$(command -v PKG_EXEC)" ]; then # package not installed fi
JBallin

Antworten:

164

Sie können verwenden

brew ls --versions myformula

um die installierten Versionen der jeweiligen Formel auszugeben. Wenn die Formel nicht installiert ist, ist die Ausgabe leer.

Wenn Sie eine neuere Version von Homebrew verwenden, mit der Sie arbeiten können brew update, können Sie dies einfach ausführen (danke Slaven):

if brew ls --versions myformula > /dev/null; then
  # The package is installed
else
  # The package is not installed
fi

Trotzdem ist es wahrscheinlich eine gute Idee, die Existenz des Tools überhaupt zu überprüfen und nicht nur nach dem jeweiligen Homebrew-Paket zu suchen (z. B. durch Suchen nach der ausführbaren Datei in der $PATH). Menschen neigen dazu, Werkzeuge in der Praxis auf ziemlich viele Arten zu installieren, wobei Homebrew nur eine davon ist.

Holger Just
quelle
6
Da github.com/Homebrew/brew/commit/… ausreicht, ist es ausreichend, nach dem Exit-Code zu suchen : Wenn die Formel nicht installiert ist, wird false (1) zurückgegeben.
Slaven Rezic
Wenn ich also laufe if macchanger --help > /dev/null; then, prüft das dann, ob macchangeres installiert ist?
anonym
@KeeganKuhn Wenn das gelungen ist, dann macchangerist in der aktuellen Shell $PATH. Wenn dies fehlschlägt, ist es entweder nicht im PATH verfügbar oder nicht installiert.
Holger Nur
2
@Keegan Kuhn - Wenn Sie wirklich nur überprüfen möchten, ob sich eine Anwendung im PATH befindet (ohne sie auszuführen), können Sie sie verwenden which -s. Die -sOption (stumm) ist dokumentiert als "-s Keine Ausgabe, geben Sie einfach 0 zurück, wenn eine der ausführbaren Dateien gefunden wird, oder 1, wenn keine gefunden wird." Die richtige Verwendung ist so etwas wiewhich macchanger || echo "macchanger not on PATH"
Jeffrey Aguilera
7

Wie wäre es mit?

for pkg in macvim ngrep other needed packages; do
    if brew list -1 | grep -q "^${pkg}\$"; then
        echo "Package '$pkg' is installed"
    else
        echo "Package '$pkg' is not installed"
    fi
done
Johannes Weiss
quelle
Ihre Lösungen funktionieren nicht mit einer versionierten Formel, wie sie python@3installiert (und aufgelistet) ist python3.
Daniele Orlando
1
# install if we haven't installed any version
brew ls --versions $lib || brew install $lib
# install if we haven't installed latest version
brew outdated $lib || brew install $lib
timotheecour
quelle
1

Einfachste Zwei-Liner: Schritt eins: Stellen Sie sicher, dass sie installiert sind

$ realpath . || brew install coreutils

Dadurch wird der Realpfad des aktuellen Verzeichnisses ausgedruckt. Wenn nicht, wird er installiert. Und es wird nicht scheitern, auch wenn der echte Pfad nicht gefunden wurde.

Schritt zwei, nennen Sie es in Ihrem aktuellen Code:

$ realpath ${someDir}
Für immer Yang
quelle
Dies ist eine einfache Lösung für ein bestimmtes Werkzeug. Es ist keine generische Lösung.
Iltempo