Apakah ada cara untuk memperbarui tong minuman


37

Apakah ada cara untuk memutakhirkan semua brew cask? Sesuatu seperti brew cask upgrade?

Jawaban:


23

Skrip Bash untuk memutakhirkan paket

terinspirasi oleh jawaban Pascal

#!/usr/bin/env bash

(set -x; brew update;)

(set -x; brew cleanup;)
(set -x; brew cask cleanup;)

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`

casks=( $(brew cask list) )

for cask in ${casks[@]}
do
    version=$(brew cask info $cask | sed -n "s/$cask:\ \(.*\)/\1/p")
    installed=$(find "/usr/local/Caskroom/$cask" -type d -maxdepth 1 -maxdepth 1 -name "$version")

    if [[ -z $installed ]]; then
        echo "${red}${cask}${reset} requires ${red}update${reset}."
        (set -x; brew cask uninstall $cask --force;)
        (set -x; brew cask install $cask --force;)
    else
        echo "${red}${cask}${reset} is ${green}up-to-date${reset}."
    fi
done

Apa yang dilakukannya

  • perbarui brew / brew tong, pembersihan
  • baca daftar tong
  • periksa brew cask infountuk versi terbaru
  • instal versi baru jika tersedia (dan hapus semua versi lama!)

sumber: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b

satu liner untuk tidak sabar:

curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin

simpan sebagai /usr/local/bin/cask-upgrade , sehingga Anda dapat menjalankannya secara lokal seperti cask-upgradenanti


Bekerja seperti pesona. Akan lebih baik untuk meminta daftar terlebih dahulu dari paket tanggal terlebih dahulu. Cukup mudah untuk mengubah skrip untuk melakukannya.
eduncan911

Terima kasih! Sudahkah Anda mencoba mengintegrasikan ini langsung ke dalam Homebrew Cask? Saya baru saja mengubahnya menjadi ikan dan itu bekerja untuk saya juga. Ini juga mengungkapkan kepada saya bahwa beberapa versi lama masih ada setelah saya menginstal yang saat ini.
Pascal

Anda harus menjalankan brew cask uninstall --forcesebelum menginstal versi baru jika Anda tidak ingin versi lama tetap di sana.
Pascal

@ Pascal ya saya perhatikan saya punya banyak versi lama yang ditumpuk di sini juga. Segera saya akan menambahkan perintah uninstall.
Atais

@ Amis apakah penghapusan tetap konsisten bekerja untuk Anda? Beberapa tong sekarang meninggalkan folder kosong dengan nomor versi dengan skrip saya, yang mengacaukan pemeriksaan versi.
Pascal


19

upgrade homebrew-tong

Saya pikir ini adalah solusi terbaik untuk meningkatkan tong.
sumber: https://github.com/buo/homebrew-cask-upgrade

Instalasi & penggunaan

brew tap buo/cask-upgrade
brew update
brew cu

(Opsional) Memaksa upgrade aplikasi yang sudah ketinggalan zaman termasuk yang ditandai sebagai yang terbaru:

brew cu --all

12

Seperti kutipan dalam jawaban lain mengatakan, saat ini tidak ada cara untuk memutakhirkan semua tong yang diperbarui.

Namun, bagian kedua dari jawabannya salah: brew upgrade --alltidak bisa memutakhirkan tong.

Satu-satunya cara untuk memutakhirkan semua tong adalah dengan mendapatkan daftar tong yang dipasang dan memaksanya untuk diinstal ulang - termasuk yang belum berubah!

Pada ikan , Anda bisa melakukannya seperti ini:

for app in (brew cask list)
    brew cask install --force $app
end

edit:

Atais membuat skrip yang berfungsi: Skrip Bash untuk memutakhirkan paket .
Harap jawab jawabannya daripada yang ini.


1
Nah, ingatlah bahwa itu benar-benar akan menginstal ulang semua aplikasi Anda, bukan hanya memperbarui :(
Atais

1
Untuk memutakhirkan daftar tong, Anda harus menjalankan brew cask updatekemudian ikuti respons sebelumnya untuk memutakhirkan hanya paket yang saat ini kedaluwarsa di sini: apple.stackexchange.com/a/231020/49601
Danijel-James W

@ Danijel-JamesW Aku mengembalikan uang kembalianmu karena itu salah. Mungkin itu cara untuk melakukannya di kulit lain, tetapi tidak pada ikan.
Pascal

10

Dari homebrew caskdokumentasi :

Karena repositori homebrew-tong adalah Tap Homebrew, Anda akan menarik tong terbaru setiap kali Anda mengeluarkan perintah Homebrew biasa brew update. Saat ini, tong sampah rumah tidak selalu dapat mendeteksi jika Aplikasi telah diperbarui. Anda dapat memaksa pembaruan melalui perintah brew cask install --force. Kami sedang berupaya meningkatkan ini.

Yang berikut harusnya cukup untuk meningkatkan formula dan tong minuman.

brew upgrade --all 

4
Ini tidak benar lagi. brew upgrade --allsetara dengan brew upgradesekarang. Tong tidak ditingkatkan oleh perintah itu.
proski

6

Inilah yang saya miliki di .bash_profile yang saya jalankan untuk melakukan upgrade penuh dari homebrew. Saya "menyematkan" beberapa item untuk mencegah unduhan raksasa berulang kali diambil untuk setiap pembaruan, karena versi mereka selalu "terbaru" atau tidak boleh ditingkatkan.

boop() {
  brew update && brew upgrade && brew cleanup \
    && cask-upgrade && cask-retire && brew cask cleanup \
      && brew doctor && brew cask doctor
}

__is_pinned() {
  local pinned=";pixate-studio;sketchup;skype;"
  [[ *";${1};"* != "${pinned}" ]] && return 0 || return 1
}

cask-upgrade() {
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      if [[ "${vers}" == "latest" ]]; then
        brew cask install "${name}" --force
      else
        brew cask install "${name}" 2> >(grep -v "re-install")
      fi
    fi
  done < <(brew cask list --versions)
}

cask-retire() {
  room="/opt/homebrew-cask/Caskroom"
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      for inst in $(ls "${room}/${name}"); do
        if [[ "${inst}" != "${vers}" ]]; then
          echo "Removing ${name} version ${inst}"
          rm -r "${room}/${name}/${inst}"
        fi
      done
    fi
  done < <(brew cask list --versions)
}

2

Untuk menginstal ulang aplikasi pembuatan bir di zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done

Ini tidak terlalu baik untuk pengguna yang mungkin memiliki banyak brew caskinstalasi yang memerlukan input pengguna (misalnya - kuarsa) . Selain itu, tidak perlu menghapus semua aplikasi sebelum menginstal ulang. Idealnya Anda juga harus menjalankan pembaruan seperti brew cask updatedulu.
Danijel-James W

@ Danijel-JamesW Sayangnya itu adalah jika Anda tidak ingin versi lama tetap.
Pascal


1

Saya merekomendasikan jawaban @ eduncan911 dalam pertanyaan rekan di Stack Overflow .

Pendeknya:

  • $ brew-cask.shhanya mencantumkan output yang mirip dengan Homebrew's brew update. daftar di atas menunjukkan semua paket yang diinstal, dengan warna hijau menunjukkan setiap pembaruan yang menunggu
  • $ brew-cask.shUpgrade akan memaksa upgrade paket-paket itu.

Instal dari repo-nya dengan:

$ curl -L https://raw.githubusercontent.com/eduncan911/dotfiles/master/bin/brew-cask.sh --create-dirs -o ~/bin/brew-cask.sh
$ chmod 755 ~/bin/brew-cask.sh

Kemudian gunakan seperti ini:

$ brew-cask.sh
$ brew-cask.sh upgrade

1

Saya membuat skrip seperti itu sendiri. Silakan lihat github https://github.com/pesh1983/brew_cask_upgrade . Ini memiliki deskripsi yang cukup bagus, tetapi jika Anda memiliki pertanyaan tambahan, jangan ragu untuk bertanya kepada saya. Itu tidak adil upgrade: uninstall dan instal, sehingga pembersihan yang diperlukan akan dilakukan oleh 'buatan' itu sendiri.


1

Ini mungkin akan lebih tepat sebagai komentar, tapi saya tidak punya cukup reputasi untuk meninggalkan satu, jadi ...

Pada tulisan ini, homebrew-caskmemiliki sistem peningkatan sendiri, sehingga skrip dan alat pihak ketiga tidak lagi diperlukan.

Untuk daftar tong yang kedaluwarsa: brew cask outdated

Untuk memutakhirkan semua tong yang kedaluwarsa: brew cask upgrade


0
for app in $(brew cask list); do
    cver="$(brew cask info "${app}" | head -n 1 | cut -d " " -f 2)"
    ivers=$(ls -1 "/opt/homebrew-cask/Caskroom/${app}/.metadata/" | tr '\n' ' ' | sed -e 's/ $//')
    aivers=(${ivers})
    nvers=$(echo ${#aivers[@]})
    echo "[*] Found ${app} in cask list. Latest available version is ${cver}. You have installed version(s): ${overs}"
    if [[ ${nvers} -eq 1 ]]; then
        echo "${ivers}" | grep -q "^${cver}$" && { echo "[*] Latest version already installed :) Skipping changes ..."
        continue; }
    fi
    echo "[+] Fixing from ${ivers} to ${cver} ..."
    brew cask uninstall "${app}" --force
    brew cask install "${app}"
done

Ini tidak dapat dibaca - juga perlu penjelasan tentang apa yang dilakukannya
user151019
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.