Deteksi apakah paket homebrew diinstal


104

Saya akan menulis skrip shell untuk mendeteksi jika beberapa paket homebrew diinstal di sistem. Apakah ada cara untuk menggunakan perintah brew untuk mencapai itu?

Saya mencoba menggunakan kode keluar dari brew install <formula> --dry-run. Tapi ini membangun paket jika hilang.


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. halaman manual pembuatan ; akan sangat senang memberikannya sebagai jawaban
166_MMX

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

Jawaban:


164

Kamu bisa memakai

brew ls --versions myformula

untuk menampilkan versi yang diinstal dari rumus masing-masing. Jika rumus tidak dipasang, keluaran akan kosong.

Saat menggunakan versi homebrew terbaru, yang bisa Anda dapatkan brew update, Anda bisa menjalankan ini (terima kasih Slaven):

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

Karena itu, mungkin ide yang baik untuk memeriksa keberadaan alat sama sekali dan tidak hanya memeriksa paket homebrew masing-masing (misalnya dengan mencari file yang dapat dieksekusi di $PATH). Dalam praktiknya, orang cenderung menginstal alat dengan cara yang cukup besar, dengan homebrew hanya salah satunya.


6
Karena github.com/Homebrew/brew/commit/… cukup memeriksa kode keluar: jika rumus tidak diinstal, maka false (1) dikembalikan.
Slaven Rezic

Jadi jika saya jalankan if macchanger --help > /dev/null; then, apakah itu akan memeriksa apakah macchangersudah diinstal?
anonim

@KeeganKuhn Jika berhasil, maka macchangerada di shell saat ini $PATH. Jika gagal, itu tidak tersedia di PATH atau tidak diinstal.
Holger Hanya

2
@Keegan Kuhn - Jika Anda benar-benar hanya ingin memeriksa apakah suatu aplikasi ada di PATH (tanpa menjalankannya), Anda dapat menggunakan which -s. The -spilihan (diam) didokumentasikan sebagai "-s ada output, hanya kembali 0 jika salah satu executable ditemukan, atau 1 jika tidak ditemukan." Penggunaan yang tepat kira-kira sepertiwhich macchanger || echo "macchanger not on PATH"
Jeffrey Aguilera

7

Bagaimana dengan?

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

Solusi Anda tidak berfungsi dengan beberapa rumus berversi seperti python@3yang diinstal (dan dicantumkan) sebagai 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

Dua baris termudah: Langkah pertama, pastikan sudah terpasang

$ realpath . || brew install coreutils

Ini akan mencetak realpath dari dir saat ini, jika tidak, maka itu akan menginstalnya. Dan itu tidak akan gagal bahkan realpath tidak ditemukan.

Langkah kedua, sebut dalam kode Anda yang sebenarnya:

$ realpath ${someDir}

Ini adalah solusi mudah untuk alat tertentu. Ini bukan solusi umum.
iltempo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.