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.

iltempo
sumber
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.

Holger Just
sumber
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
Johannes Weiss
sumber
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
timotheecour
sumber
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}
ForeverYang
sumber
Ini adalah solusi mudah untuk alat tertentu. Ini bukan solusi umum.
iltempo