Homebrew (im Gegensatz zu Macports) stellt Programme nicht vor Systeme

Macports fügt /opt/local/bin/vor /usr/bindem Pfad ein, und wenn das gleiche Programm in beiden Ordnern vorhanden ist, hat das von Macports installierte Programm Vorrang.

Mir ist unklar, wie Homebrew dieses Problem bewältigt. Nehmen wir ein konkretes Beispiel, sagen wir, ich laufe brew install git, ich habe jetzt

> /usr/local/bin/git --version
git version 2.14.2
> git --version
git version 2.13.5 (Apple Git-94)

Um das neuere (git 2.14) zu verwenden, ist es mühsam /usr/local/bin/git, . Außerdem /usr/local/binkann es unerwünschte Nebenwirkungen haben, wenn ich mir selbst mehr Priorität einräume.

Wie werden aktualisierte Homebrew-Programme standardmäßig ausgeführt, wenn sie mit denen kollidieren, die bereits auf macOS vorhanden sind? Denn ich habe gesehen, dass Homebrew Kollisionen vermeidet, indem Benutzer entweder oder pythoneingeben müssen . Weniger klar ist dies für den Fall von .python2python3git

Antworten (1)

Allgemeine Konvention ist in der Tat /usr/local/binvoranzustellen /usr/bin. Dies ist durch Bearbeiten der /etc/pathDatei oder sudo launchctl config user path "/usr/local/bin:$PATH". Dies führt dazu, dass ausführbare Dateien in /usr/binvon denen in überschattet werden /usr/local/bin. Die Homebrew-FAQ schlägt dies vor.

Homebrew-Rezepte verlinken absichtlich keine Programme /usr/local/bin, die potenziell systemweite Konflikte verursachen könnten (Homebrew-Ausführungsdateien werden tatsächlich in installiert /usr/local/Cellarund symbolisch mit verknüpft /usr/local/bin). Wenn Sie ein potenziell konfliktverursachendes Paket installieren, wird Homebrew Sie davor warnen und etwas sagen wie: "Wir haben dieses Paket nicht automatisch verlinkt. Wenn Sie wirklich wollen, können Sie `brew link ..." ausführen. Homebrew ist im Allgemeinen ziemlich gut darin, bestehende Systempakete zu respektieren.

Als empirische Anekdote habe ich immer mitbeschattet /usr/binund /usr/local/binbin nie auf irgendwelche Probleme gestoßen. YMMV natürlich.