Homebrew paketinin kurulu olup olmadığını tespit edin


105

Sistemde birkaç homebrew paketinin kurulu olup olmadığını tespit etmek için bir kabuk betiği yazmak üzereyim. Bunu başarmak için bir demleme komutu kullanmanın bir yolu var mı?

Çıkış kodunu kullanmayı denedim brew install <formula> --dry-run. Ancak bu, eksikse paketi oluşturur.


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. brew man sayfası ; cevap olarak vermeyi çok isterdim
166_MMX

if [ ! -x "$(command -v PKG_EXEC)" ]; then # package not installed fi
JBallin

Yanıtlar:


166

Kullanabilirsiniz

brew ls --versions myformula

ilgili formülün kurulu sürümlerini çıkarmak için. Formül yüklenmemişse çıktı boş olacaktır.

Kullanabileceğiniz son homebrew sürümlerini kullanırken brew update, bunu çalıştırabilirsiniz (teşekkürler Slaven):

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

Bununla birlikte, yalnızca ilgili homebrew paketini kontrol etmek değil (örneğin, içinde çalıştırılabilir dosyayı arayarak) aracın varlığını kontrol etmek muhtemelen iyi bir fikirdir $PATH. İnsanlar, aletleri pratikte oldukça fazla sayıda yolla kurma eğilimindedir, homebrew bunlardan sadece biridir.


6
Yana github.com/Homebrew/brew/commit/... çıkış kodu kontrol etmek için yeterlidir: Formül takılı değilse, o zaman yanlış (1) döndürülür.
Slaven Rezic

Öyleyse, çalıştırırsam if macchanger --help > /dev/null; then, macchangerkurulu olup olmadığını kontrol edecek mi?
anonim

@KeeganKuhn Bu başarılı olduysa, o zaman macchangermevcut kabuğun içindedir $PATH. Başarısız olursa, ya YOLDA mevcut değildir ya da kurulmamıştır.
Holger Just

2
@Keegan Kuhn - Bir uygulamanın PATH'de olup olmadığını gerçekten kontrol etmek istiyorsanız (çalıştırmadan), kullanabilirsiniz which -s. -sSeçeneği (sessiz) olarak "Hiçbir çıkış -s hiçbiri bulunursa, sadece 1 yürütülebilir herhangi bulunursa 0 dönmek ya." Belgelenmiştir Doğru kullanım which macchanger || echo "macchanger not on PATH"
Jeffrey Aguilera

7

Ne dersin?

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

Çözümleriniz, gibi python@3yüklü (ve listelenmiş) bazı sürümlü formüllerle çalışmıyor 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

1

En kolay iki gömlek: Birinci adım, kurulu olduğundan emin olun

$ realpath . || brew install coreutils

Bu, geçerli dizinin gerçek yolunu yazdıracak, yoksa, yükleyecektir. Ve gerçek yol bulunmasa bile başarısız olmayacak.

İkinci adım, onu gerçek kodunuzda arayın:

$ realpath ${someDir}

Bu, belirli bir alet için kolay bir çözümdür. Genel bir çözüm değil.
iltempo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.