Homebrew Cask ile kurulan tüm fıçıları yükseltin


159

OS X'e uygulamalar yüklemek için Homebrew Cask kullanıyorum . Kurulu tüm fıçıları nasıl yükseltebilirim?


3
Ekteki soru: "Fıçılardan birini nasıl yükseltebilirim?"
Matthew Harwood

Bununla çok ilgilenirim ... bir fıçı yükseltmenin herhangi bir yolu yok gibi görünüyor, ama mantıklı değil. Parantez 1.3 yüklüyse ve parantezlerin içine eklentiler yükledim. Şimdi 1.4 çıktı, ben yükseltmek istiyorum, ama eklentileri tutmak. Bunu nasıl yapmam gerektiğini anlamıyorum.
Jean-François Beauchef

Köşeli ayraçlar ile ilgili olarak, Köşeli Ayraçlar için OS X'teki kullanıcı uzantıları depolanır ~/Library/Application Support/Brackets/extensions/userve bunlar yükseltmeler boyunca devam etmelidir. Sistem eklentileri gerçekten uygulama paketinde saklanır ve uygulama paketini Brackets.app/extensions/defaultdeğiştirdiğinizde bunlar kaybolur, ancak en kolay yol eklentileri eski paketten yenisine kopyalamak olacaktır.
Caleb Xu

Bilginize: Implementbrew cask upgrade usta: Homebrew içine 15 kaydedilmesini birleşti
l --marc l

Tek bir fıçı yükseltmek için bulduğum tek yolu brew cask uninstall my-cool-casko zaman brew cask install my-cool-cask.
Aaron Gray

Yanıtlar:


295

Sonunda Homebrew Cask için resmi bir yükseltme mekanizması var ( uygulama için Sayı 3396'ya bakın )! Kullanmak için şu komutu çalıştırın:

brew cask upgrade

Ancak bu, sürüm bilgisi ( version :latest) veya yerleşik yükseltme mekanizması ( auto_updates true) bulunan uygulamaları güncellemez . Bu fıçıları yeniden kurmak (ve yükseltmeler varsa bunları yükseltmek için), yükseltme komutunu şu --greedybayrakla çalıştırın :

brew cask upgrade --greedy


3
Aşağıdaki cevabımı alıntı yapmadan veya oy vermeden kopyaladığınız için teşekkürler mipadi. Her neyse şimdi bu tam görünüyor.
enrico.bacis

3
@ enrico.bacis: Sakin ol. Cevabınızı görmedim ve bu bariz bir ekleme. (Bil, sen bir yenisini eklemek yerine bu cevabı kaydetmiştiniz olmalıdır.)
mipadi

2
Bu gerçekten beni rahatsız etti, bu yüzden tüm Brew uygulamalarını güncellemek ve kullanıcının hangi Cask uygulamalarının güncelleneceğini seçmesine izin vermek için bu komut dosyasını oluşturdum. Uygulamaları dikkate almayı da hariç tutabilirsiniz. github.com/derrekyoung/ScriptsAndUtils/blob/master/…
Derrek

14
Artık brew cask outdated | xargs brew cask reinstallyalnızca eski fıçıları yeniden yüklemek için kullanabilirsiniz .
phdoerfler

2
brew cask outdatedYalnızca "otomatik güncelleme" etkin olmayan uygulamaların adlarının yazdırıldığını belirtmek önemlidir . Eski TÜM uygulamaları yükseltmek için şunu kullanınbrew cask outdated --greedy --verbose | grep -v '(latest)' | awk '{print $1}' | xargs brew cask reinstall
jmk

48

homebrewleri-fıçısı yükseltme

Bence bu, fıçıları yükseltmek için en iyi çözüm.
kaynak: https://github.com/buo/homebrew-cask-upgrade

Kurulum ve kullanım

brew tap buo/cask-upgrade
brew update
brew cu

(İsteğe bağlı) En son olarak işaretlenenler de dahil olmak üzere eski uygulamaları yükseltmeye zorla:

brew cu --all

@XingangHuang yes
ovnia

26

Takılı fıçıları aşağıdakilerle listelemek mümkündür:

brew cask list

Ve bir fıçının yeniden takılmasını zorlayın:

brew cask install --force CASK_NAME

İlk komutun çıkışını ikinciye bağlayarak, tüm fıçıları güncelliyoruz:

brew cask list | xargs brew cask install --force

1
Bu fıçıları gerçekten güncellemiyor. Güncellemesi olmayan fıçılar için bile yeniden yüklemeyi zorlar. Kaç tane fıçı taktığınıza ve ne kadar süredir takıldığına bağlı olarak, bu gereksiz indirmeleri tetikleyebilir, çok zaman alabilir ve sudo erişimi için komut isteyebilir.
Burhan Ali

20

Paketleri yükseltmek için Bash betiği

Pascal cevabından esinlenerek

#!/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

Bu ne yapar

  • demlemek / demlemek fıçı güncelleme, temizleme
  • fıçı listesini oku
  • brew cask infoen yeni sürümü kontrol et
  • varsa yeni sürümü yükle (ve tüm eski sürümleri kaldırır!)

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

sabırsız için bir astar:

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

Farklı kaydet /usr/local/bin/cask-upgrade , böylece cask-upgradedaha sonra yerel olarak çalıştırabilirsiniz


Sadece yapamaz brew cask info $cask | grep "Not installed"mısın?
Det

@Ah hah ... görmedim, ama şimdi görüyorum. Bunu bir sonraki sürümde yapabilirim ;-)
Atais

1
$ brew cask info $cask | grep "Not installed"hata veriyorError: This command requires a Cask token
eduncan911

1
@ eduncan911 sen senaryo ile kullanın, sonrafor cask in ${casks[@]}; do
Det

smacks headAçıkçası! Bunu yakalamadığımı düşünemiyorum.
eduncan911

11

Aralık 2017 itibariyle: demlemek fıçısı yükseltmesi

[Homebrew fıçı için yükseltme komutu sunduğunda Aralık 2017'den beri DEPRECATED] Sadece aşağıdakileri kullanıyorum:

brew cask outdated | xargs brew cask reinstall


Temelde benim de yaptığım şey dışında, ben awk '{print $1}'ikisi arasında pipo .
Paul Nelson Baker

6

İşte bunu ele almak için yazdığım işlev. Kişisel olarak her şeyi körü körüne yeniden yüklemesini istemediğimi unutmayın, çünkü kullandığım fıçıların yüklenmesi biraz zaman alıyor veya ek bilgi istemek gerekiyor.

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 
} 

OS X El Capitan kullanıyorum, ancak bu işlevi test ettiğimde , - fonksiyon adlarında izin verilen bir karakter olmadığından, hataları atma kabuğum vardı . Önemli ayrım - bash'da çalışmasına rağmen, sh için izin verilmiyor, bu nedenle #! / Bin / sh'yi birden çok kabuklu sistemlerde uyumluluk için kullanıyorsanız, bu işe yaramaz. Kısa çizgilerin alt çizgilere değiştirilmesi de işe yarar.
Bryan 'BJ' Hoffpauir Jr.

5

@Atais'in cevabına dayanarak, mantığını daha hoş bir şeye dönüştürdüm. Aslında yükseltmeyi zorlamadan önce paketleri yükseltilmiş olarak incelemek için bir yol istedim.

  • $ brew-cask.shHomebrew'lara benzer bir çıktı listeler brew update.
  • yukarıdaki liste, kurulu tüm paketleri gösterir ve yeşil, bekleyen güncellemeleri gösterir.
  • $ brew-cask.sh upgrade bu paketlerin yükseltilmesini zorlar.

Kod:

# 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

sadece yükleyin (aka "şimdi ihtiyacım var!")

Bu kontrol ediyor benim .dotfilesrepo ; böylece, hızla içine yükleyebilirsiniz ~/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

Sonra şöyle kullanın:

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

Yolunuzda yoksa yukarıdaki ifadelere ~/binönek ekleyin ~/bin/.


5

brew cask upgrade

upgradeKomut geçenlerde Homebrew Cask girmiştir ve diğer cevaplar açıklanan tüm diğer manuel yöntemler deprecate gerekir.


Bu komut var olmasına rağmen, gerçekten bir takım paketleri yükseltmez.
Acumenus

4

Bence kullanmak

brew cask reinstall `brew cask outdated`

hile yapacak. Bu ayrıca uygulamanın önceki sürümlerinin kaldırılmasına yardımcı olur ve daha yeni sürümü yükler.


2
bu şimdi olmalıbrew cask reinstall `brew cask outdated`
gbonetti

1
@Gbonetti güncellemesi için teşekkürler. Haklısın. Yeni "modası geçmiş" seçeneği ile görev daha kolay ve daha hızlı olur :-).
Pranab Agarwal

2

deinspanjer sağlanan kodu iyileştirerek , ben chocolatey ( choco update --noop / choco modası geçmiş ) gibi bir noop komut taklit etmeye çalıştı .

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

Gördüğünüz gibi, kullanım durumum biraz farklı olduğundan modüler bir yaklaşım kullanıyorum. Bilgisayarımın önünde oturmak ve yüklediğim her uygulama için evet / hayır yazmak istemiyorum. Fıçıları yükseltmenin gerçek bir yolu olmasa da (sadece en yeni sürümü yeniden yükleyin), ilk önce mevcut güncellemeler olduğu bilgisine sahip olmak için güncelleme yapıyorum .

Sonra, bilgilerini görüntülemek için tüm fıçılar arasında dolaşıyorum. Daha önce güncelleme yaptığım için, şimdi bir fıçının en son sürümünün yüklü olmadığı bilgisi sağlanıyor.

Güncelleme yöntemimin içinde, aslında bu belirli satır için bilgi komutunu ayrıştırıyorum:

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

Bunun anlamı şudur: "Yüklenmemiş satırı" her okuduğunuzda sağlanan 3 satırlık bilgi verin. Ardından içinde bağlantı bulunan satırları silin, içinde ':' bulunan bir satırı da silin. "

Demlemek fıçı bilgisi komutunun yapısı göz önüne alındığında, fıçının aynı zamanda yüklendiği gerçek adını yansıtan bir satır (sürüm bilgisi yok, uygulama URL'si yok) ile sonuçlanır.

demlemek fıçı bilgi çıkışı

Benim sürümümde, bu bilgi artık basıldı, böylece hangi fıçıların güncel olmadığını ve güncellenebileceğini kolayca görebilirsiniz.

Bu noktada bir geçiş durumu yapıyorum, çünkü belki de şu anda bir şeyleri güncellemek için yeterli zaman yok. Kullanım durumunuza bağlıdır. Benim için bazen sadece yeni olanı görmek istiyorum (yeni bir sürüm, bir hata düzeltmesi bekleniyor) ama aslında şeyleri güncellemek için zamanım yok çünkü şu anda tarayıcımı kapatmak istemiyorum.

Eğer biri "evet" i seçerse, temizlenmiş fıçı isimlerinin listesi güncelleme işlevine verilir, burada güncel olmadığı belirlenen her fıçı için yeniden yükleme yapılır.

Deinspanjer'e tekrar teşekkürler, bu sorunu kendim için çözmeye çalışırken, her zaman önceden demlemek güncellemesini vermeyi unuttum, bu yüzden orada ayrıştırmak için "yüklü olmayan" bir hat yoktu (tüm yaklaşımımın temeli).

Umarım bu yardımcı olmuştur.




2

modası geçmiş fıçılar alın:

demlemek fıçı modası geçmiş

fıçı yükseltme:

demlemek fıçı eski-fıçı yeniden

demo komut dosyası:

$ 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}"

2

Eski fıçıları kontrol et:

demlemek fıçı modası geçmiş

Tüm eski fıçıları yükseltme:

demlemek fıçı yükseltme

Belirli bir fıçı yükseltmek istiyorsanız, yükseltmeden sonra sadece fıçı adı eklemek (ör: 4k-video-downloader):

demlemek fıçı yükseltme 4k-video-downloader


2
Merhaba, StackOverflow'a hoş geldiniz. Bu soruların biri hem son derece popüler hem de kabul edilen birden fazla yanıtı olan eski bir soru olduğu düşünüldüğünde, soruyu nasıl yanıtladığı ve mevcut cevaplara neden tercih edileceği konusunda daha ayrıntılı bilgi vermek için lütfen yanıtınızı düzenleyin. Teşekkürler.
MandyShaw

1

Ne okudum dayanarak en son olarak tanımlanan uygulamalar da dahil olmak üzere güncellenecek dosyaları listeleyen bir dosya oluşturacak bir komut dosyası oluşturduk. Daha sonra dosyayı gereksinimlerinize uyacak şekilde değiştirebilir ve olinst betiğimi kullanarak güncellemeleri yükleyebilirsiniz.

Daha fazla bilgi için github'umu ziyaret edin.

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



1

kullanırım

brew cask install --force `brew cask list`
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.