Tingkatkan semua tong yang dipasang melalui Tong Homebrew

159

Saya menggunakan Homebrew Cask untuk menginstal aplikasi pada OS X. Bagaimana cara meningkatkan semua tong yang diinstal?

enrico.bacis
sumber
3
Pertanyaan yang ditambahkan: "bagaimana cara saya meningkatkan salah satu tong?"
Matthew Harwood
Saya akan sangat tertarik dengan itu ... sepertinya tidak ada cara untuk meningkatkan tong, tetapi itu tidak masuk akal. Saya telah menginstal Kurung 1.3, dan saya telah menginstal plugin di dalam kurung. Sekarang setelah 1.4 keluar, saya ingin meningkatkan, tetapi tetap menggunakan plug-in. Saya tidak mengerti bagaimana saya seharusnya melakukan itu.
Jean-François Beauchef
Mengenai Kurung secara khusus, ekstensi pengguna pada OS X untuk Kurung disimpan ~/Library/Application Support/Brackets/extensions/user, dan ini harus bertahan di seluruh peningkatan. Plugin sistem memang disimpan di dalam bundel aplikasi Brackets.app/extensions/default, dan ini hilang ketika Anda mengganti bundel aplikasi, tetapi cara termudah adalah dengan menyalin plugin dari bundel lama ke yang baru.
Caleb Xu
FYI: Implementbrew cask upgrade digabung 15 komitmen ke Homebrew: master
l --marc l
Satu-satunya cara yang saya temukan untuk meningkatkan satu tong adalah untuk brew cask uninstall my-cool-caskkemudian brew cask install my-cool-cask.
Aaron Grey

Jawaban:

295

Sekarang akhirnya ada mekanisme pemutakhiran resmi untuk Homebrew Cask (lihat Edisi 3396 untuk implementasinya)! Untuk menggunakannya, cukup jalankan perintah ini:

brew cask upgrade

Namun ini tidak akan memperbarui tong yang tidak memiliki informasi versi ( version :latest) atau aplikasi yang memiliki mekanisme pemutakhiran bawaan ( auto_updates true). Untuk menginstal ulang tong-tong ini (dan akibatnya memutakhirkannya jika pemutakhiran tersedia), jalankan perintah pemutakhiran dengan --greedybendera seperti ini:

brew cask upgrade --greedy

scribblemaniac
sumber
3
Terima kasih @mipadi karena telah menyalin jawaban saya di bawah ini ke dalam yang satu ini tanpa mengutip atau memperbaiki. Pokoknya sekarang ini yang tampaknya lengkap.
enrico.bacis
3
@ enrico.bacis: Dinginkan. Saya tidak melihat jawaban Anda, dan ini merupakan tambahan yang jelas. (Dan sebagai catatan, Anda seharusnya mengedit jawaban ini alih-alih menambahkan yang baru.)
mipadi
2
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. github.com/derrekyoung/ScriptsAndUtils/blob/master/…
Derrek
14
Anda sekarang dapat menggunakan brew cask outdated | xargs brew cask reinstalluntuk hanya menginstal ulang tong yang sudah kedaluwarsa.
phdoerfler
2
Penting untuk dicatat, yang brew cask outdatedhanya mencetak nama aplikasi yang tidak mengaktifkan "pembaruan otomatis". Untuk memutakhirkan SEMUA aplikasi yang kedaluwarsa, gunakanbrew cask outdated --greedy --verbose | grep -v '(latest)' | awk '{print $1}' | xargs brew cask reinstall
jmk
48

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 usang termasuk yang ditandai sebagai terbaru:

brew cu --all
Atais
sumber
@XingangHuang ya
ovnia
26

Dimungkinkan untuk membuat daftar tong yang terpasang dengan:

brew cask list

Dan paksa instalasi ulang tong dengan:

brew cask install --force CASK_NAME

Jadi, piping output dari perintah pertama ke perintah kedua, kami memperbarui semua tong:

brew cask list | xargs brew cask install --force
enrico.bacis
sumber
1
Itu tidak benar-benar memperbarui tong. Ini memaksa instalasi ulang, bahkan untuk tong yang tidak memiliki pembaruan tersedia. Bergantung pada berapa banyak tong yang telah Anda instal dan berapa lama tong telah dipasang, ini mungkin memicu unduhan yang tidak perlu, membutuhkan banyak waktu dan meminta akses sudo.
Burhan Ali
20

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

Atais
sumber
Tidak bisakah kamu melakukannya brew cask info $cask | grep "Not installed"?
Det
@Det hah ... yah saya tidak melihatnya, tapi saya lakukan sekarang. Yah saya mungkin melakukannya dalam versi berikutnya ;-)
Atais
1
$ brew cask info $cask | grep "Not installed"memberikan kesalahanError: This command requires a Cask token
eduncan911
1
@ eduncan911 Anda menggunakannya dengan skrip, setelahfor cask in ${casks[@]}; do
Det
smacks headjelas! tidak percaya aku tidak menangkap itu.
eduncan911
11

Per Desember 2017 digunakan: brew cask upgrade

[TERDEPAN sejak Desember 2017 ketika Homebrew memperkenalkan perintah peningkatan untuk tong] Saya cukup menggunakan yang berikut ini:

brew cask outdated | xargs brew cask reinstall

Bojoer
sumber
Pada dasarnya apa yang saya lakukan juga, kecuali saya sudah menyela awk '{print $1}'di antara keduanya.
Paul Nelson Baker
6

Ini adalah fungsi yang saya tulis untuk menangani ini. Perhatikan bahwa saya secara pribadi tidak ingin menginstal ulang semuanya secara membabi buta karena beberapa tong yang saya gunakan memerlukan waktu beberapa saat untuk menginstal atau memerlukan konfirmasi tambahan.

brew_cask_upgrade() { 
  if [ "$1" != '--continue' ]; then 
    echo "Removing brew cache" 
    rm -rf "$(brew --cache)" 
    echo "Running brew update" 
    brew update 
  fi 
  for c in $(brew cask list); do 
    echo -e "\n\nInstalled versions of $c: " 
    ls /opt/homebrew-cask/Caskroom/$c 
    echo "Cask info for $c" 
    brew cask info $c 
    select ynx in "Yes" "No" "Exit"; do  
      case $ynx in 
        "Yes") echo "Uninstalling $c"; brew cask uninstall --force "$c"; echo "Re-installing $c"; brew cask install "$c"; break;; 
        "No") echo "Skipping $c"; break;; 
        "Exit") echo "Exiting brew_cask_upgrade"; return;; 
      esac 
    done 
  done 
} 
deinspanjer
sumber
Saya menjalankan OS X El Capitan, tetapi ketika saya menguji fungsi ini, saya mengalami kesalahan karena shell - bukan karakter yang diizinkan dalam nama fungsi . Perbedaan penting - meskipun bekerja di bash, ia tidak diizinkan untuk sh jadi jika Anda menggunakan #! / Bin / sh untuk kompatibilitas lintas sistem dengan banyak shell, ini tidak akan berfungsi. Namun, mengubah tanda hubung menjadi garis bawah berfungsi dengan baik.
Bryan 'BJ' Hoffpauir Jr.
5

Berdasarkan jawaban @Atais, saya telah meningkatkan logikanya menjadi sesuatu yang lebih baik. Saya ingin cara memeriksa paket untuk ditingkatkan terlebih dahulu, sebelum benar-benar memaksa upgrade.

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

Kode:

# Usage:
#
#  $ brew update
#    You should execute this first to update everything locally.
#
#  $ brew-cask.sh [update]
#    This will list all of your cask packages and rather there is an upgrade
#    pending with a ✔ checkmark, just like Homebrew does with "brew update".
#    The update command is optional, as it doesn't actually do any tracking, there's
#    not really anything to "update" with cask.  But it keeps with the pattern of
#    of Homebrew's "brew update" pattern for those with memory muscle fingers (like me).
#
#  $ brew-cask.sh upgrade
#    This performs a "brew cask install <cask> --force" of all cask packages that have
#    an update pending.
#
# This code was inspired by http://stackoverflow.com/a/36000907/56693

# get the list of installed casks
casks=( $(brew cask list) )

if [[ "$1" == "upgrade" ]]; then
  for cask in ${casks[@]}; do
    current="$(brew cask info $cask | sed -n '1p' | sed -n 's/^.*: \(.*\)$/\1/p')"
    installed=( $(ls /opt/homebrew-cask/Caskroom/$cask))
    if (! [[ " ${installed[@]} " == *" $current "* ]]); then
      echo "Upgrading $cask to v$current."
      (set -x; brew cask install $cask --force;)
    else
      echo "$cask v$current is up-to-date, skipping."
    fi
  done
else
  echo "Inspecting ${#casks[@]} casks. Use 'brew-cask.sh upgrade' to perform any updates."
  for (( i = i ; i < ${#casks[@]} ; i++ )); do
    current="$(brew cask info ${casks[$i]} | sed -n '1p' | sed -n 's/^.*: \(.*\)$/\1/p')"
    installed=( $(ls /opt/homebrew-cask/Caskroom/${casks[$i]}))
    if (! [[ " ${installed[@]} " == *" $current "* ]]); then
      casks[$i]="${casks[$i]}$(tput sgr0)$(tput setaf 2) ✔$(tput sgr0)"
    fi
  done
  echo " ${casks[@]/%/$'\n'}" | column
fi

cukup instal (alias "Aku butuh sekarang!")

Sudah diperiksa di repo saya.dotfiles ; jadi, Anda dapat menginstalnya dengan cepat ke ~/bin:

$ 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

Jika tidak ada ~/bindi jalur Anda, awali ~/bin/pernyataan di atas.

eduncan911
sumber
5

brew cask upgrade

The upgradeperintah baru-baru ini telah diperkenalkan di Homebrew Cask dan harus mencela semua metode manual yang lain dijelaskan dalam jawaban lainnya.

enrico.bacis
sumber
Meskipun perintah ini ada, itu benar-benar tidak meningkatkan sejumlah paket.
Acumenus
4

Saya pikir menggunakan

brew cask reinstall `brew cask outdated`

akan melakukan trik. Ini juga akan membantu menghapus versi aplikasi sebelumnya dan akan menginstal versi yang lebih baru.

Pranab Agarwal
sumber
2
ini seharusnya sekarangbrew cask reinstall `brew cask outdated`
gbonetti
1
Terima kasih atas pembaruan @gbonetti. Anda benar. Dengan opsi "ketinggalan zaman" yang baru, tugas menjadi lebih mudah dan lebih cepat juga :-).
Pranab Agarwal
2

memperbaiki kode yang disediakan dari deinspanjer, saya mencoba untuk meniru perintah noop, seperti yang dari cokelat ( pembaruan choco --noop / choco ketinggalan zaman ).

https://git.io/vgjiL

#!/bin/sh

fetch(){
    echo "Removing brew cache" 
    rm -rf "$(brew --cache)" 
    echo "Running brew update" 
    brew update 
}

lookup() { 
  for c in $(brew cask list); do 
    brew cask info $c 
  done 
} 

update(){
  var=$( lookup  | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d'  | cut -d ":" -f1)
  if [ -n "$var" ]; then
  echo "The following installed casks have updates avilable:"
  echo "$var"
  echo "Install updates now?"
  select yn in "Yes" "No"; do
    case $yn in
      "Yes") echo "updating outdated casks"; break;;
      "No") echo "brew cask upgrade cancelled" ;return;;
      *) echo "Please choose 1 or 2";;
    esac
    done
  for i in $var; do
    echo "Uninstalling $c"; brew cask uninstall --force "$i"; echo "Re-installing $i"; brew cask install "$i"
  done
else
  echo "all casks are up to date"
fi
}

fetch
update

Seperti yang dapat dilihat, saya menggunakan pendekatan modular karena use case saya sedikit berbeda. Saya tidak ingin duduk di depan komputer saya dan mengetik ya / tidak untuk setiap aplikasi yang saya instal. Meskipun tidak ada cara nyata untuk meningkatkan tong (hanya menginstal ulang versi terbaru), saya pertama kali membuat pembaruan untuk memiliki informasi bahwa sebenarnya ada pembaruan yang tersedia .

Selanjutnya, saya menggilir semua tong untuk menampilkan informasi mereka. Karena saya pernah membuat pembaruan sebelumnya, sekarang ada yang memberikan informasi bahwa beberapa versi terakhir tong belum diinstal.

Di dalam metode pembaruan saya, saya benar-benar mengurai perintah info untuk baris tertentu:

lookup  | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d'  | cut -d ":" -f1

Yang diterjemahkan menjadi: "Berikan 3 baris di atas informasi yang diberikan setiap kali Anda membaca baris" tidak diinstal ". Kemudian hapus setiap baris yang memiliki tautan di dalamnya, juga hapus baris yang memiliki ':' di dalamnya."

Mengingat struktur perintah info pembuatan bir, kami berakhir dengan satu baris (tidak ada info versi, tidak ada URL aplikasi), yang mencerminkan nama sebenarnya tong itu yang juga diinstal.

hasil keluaran pembuatan tong

Dalam versi saya, info ini sekarang dicetak sehingga orang dapat dengan mudah melihat tong mana yang kedaluwarsa dan dapat diperbarui.

Pada titik ini saya melakukan switch case, karena mungkin saat ini tidak cukup waktu untuk memperbarui. Itu tergantung pada kasus penggunaan Anda. Bagi saya, saya kadang-kadang hanya ingin melihat apa yang baru (menunggu versi baru, perbaikan bug) tetapi sebenarnya tidak punya waktu untuk memperbarui hal-hal karena saat ini saya tidak ingin menutup browser saya dll.

Jadi, jika seseorang memilih "ya", daftar nama tong yang dibersihkan diberikan ke fungsi pembaruan di mana untuk setiap tong yang telah ditentukan kedaluwarsa menginstal ulang dikeluarkan.

Terima kasih sekali lagi kepada deinspanjer, ketika mencoba menyelesaikan masalah ini untuk diri saya sendiri, saya selalu lupa untuk mengeluarkan pembaruan pembuatan bir terlebih dahulu sehingga tidak ada "tidak dipasang" baris di sana untuk benar-benar mengurai (dasar dari seluruh pendekatan saya).

Saya harap ini membantu.

Kevin N
sumber
2

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 setiap pembersihan yang diperlukan akan dilakukan oleh 'buatan' itu sendiri.

Pavel Goltsev
sumber
2
brew cask outdated | xargs brew cask reinstall --force
Omar Albeik
sumber
2

tong yang kedaluwarsa:

tong pembuatan bir sudah ketinggalan zaman

tingkatkan tong:

brew cask instal ulang tong yang sudah ketinggalan zaman

skrip demo:

$ cat ~/bin/brew_cask_upgrade.sh
#!/bin/bash
red=$(tput setaf 1)
# green=$(tput setaf 2)
reset=$(tput sgr0)

(set -x; brew update;)

for cask in $(brew cask outdated | awk '{print $1}')
do
    echo "${red}update ${cask} ...${reset}."
    (set -x; brew cask install --force "$cask";)
done

echo "${red}brew clean up ...${reset}"
(set -x; brew cask cleanup;)
echo "${red}brew clean up done.${reset}"
Wanming Zhang
sumber
2

Periksa tong yang kedaluwarsa:

tong pembuatan bir sudah ketinggalan zaman

Memutakhirkan semua tong yang kedaluwarsa:

upgrade pembuatan tong

Jika Anda ingin meningkatkan tong tertentu, cukup tambahkan nama tong setelah pembaruan (mis: 4k-video-downloader):

brew cask upgrade 4k-video-downloader

Amir Marmul
sumber
2
Hai, selamat datang di StackOverflow. Mengingat bahwa ini adalah pertanyaan lama dengan beberapa jawaban, yang salah satu di antaranya sangat populer dan diterima, harap edit jawaban Anda untuk memberikan perincian lebih lanjut tentang cara menjawab pertanyaan dan mengapa lebih disukai daripada jawaban yang ada. Terima kasih.
MandyShaw
1

Berdasarkan apa yang saya baca saya telah membuat skrip yang akan membuat file yang berisi daftar file yang akan diperbarui termasuk aplikasi yang didefinisikan sebagai terbaru. Anda kemudian dapat memodifikasi file agar sesuai dengan kebutuhan Anda dan menginstal pembaruan menggunakan skrip olinst saya.

Untuk informasi lebih lanjut, kunjungi github saya.

https://github.com/pacav69/caskroom-offline-install

Paul Cav
sumber
1

saya menggunakan

brew cask install --force `brew cask list`
Goksel
sumber