Jawaban:
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
brew cask info
untuk versi terbarusumber: 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-upgrade
nanti
brew cask uninstall --force
sebelum menginstal versi baru jika Anda tidak ingin versi lama tetap di sana.
Per Desember 2017, brew cask upgrade
adalah suatu hal.
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
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 --all
tidak 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.
brew cask update
kemudian ikuti respons sebelumnya untuk memutakhirkan hanya paket yang saat ini kedaluwarsa di sini: apple.stackexchange.com/a/231020/49601
Dari homebrew cask
dokumentasi :
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 perintahbrew cask install --force
. Kami sedang berupaya meningkatkan ini.
Yang berikut harusnya cukup untuk meningkatkan formula dan tong minuman.
brew upgrade --all
brew upgrade --all
setara dengan brew upgrade
sekarang. Tong tidak ditingkatkan oleh perintah itu.
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)
}
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
brew cask
instalasi 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 update
dulu.
Ini benar-benar membuat saya jengkel, jadi saya membuat skrip ini untuk memperbarui semua aplikasi Brew dan memungkinkan pengguna untuk memilih aplikasi Tong mana yang akan diperbarui. Anda dapat mengecualikan aplikasi dari pertimbangan juga.
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
Saya merekomendasikan jawaban @ eduncan911 dalam pertanyaan rekan di Stack Overflow .
Pendeknya:
brew-cask.sh
hanya mencantumkan output yang mirip dengan Homebrew's brew update
. daftar di atas menunjukkan semua paket yang diinstal, dengan warna hijau ✔
menunjukkan setiap pembaruan yang menunggubrew-cask.sh
Upgrade 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
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.
Ini mungkin akan lebih tepat sebagai komentar, tapi saya tidak punya cukup reputasi untuk meninggalkan satu, jadi ...
Pada tulisan ini, homebrew-cask
memiliki 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
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