Homebrew पीपा के माध्यम से स्थापित सभी पीकों को अपग्रेड करें


157

मैं OS X पर एप्लिकेशन इंस्टॉल करने के लिए Homebrew Cask का उपयोग करता हूं। मैं सभी इंस्टॉल किए गए पीपे को कैसे अपग्रेड कर सकता हूं?


3
जोड़ा गया सवाल: "मैं बस एक काक को कैसे अपग्रेड करूंगा?"
मैथ्यू हरवुड

मुझे इसमें बहुत रुचि होगी ... एक पीपा को अपग्रेड करने का कोई तरीका नहीं लगता है, लेकिन इसका कोई मतलब नहीं है। मेरे पास ब्रैकेट 1.3 स्थापित हैं, और मैंने कोष्ठक के अंदर प्लगइन्स स्थापित किए हैं। अब वह 1.4 बाहर है, मैं अपग्रेड करना चाहूंगा, लेकिन प्लग-इन को बनाए रखूंगा। मैं नहीं देखता कि मैं ऐसा कैसे करने वाला हूं।
जीन-फ्रांस्वा ब्यूशेफ

ब्रैकेट के बारे में विशेष रूप से, ब्रैकेट के लिए ओएस एक्स पर उपयोगकर्ता एक्सटेंशन संग्रहीत हैं ~/Library/Application Support/Brackets/extensions/userऔर ये उन्नयन के दौरान बने रहना चाहिए। सिस्टम प्लग इन वास्तव में ऐप बंडल में संग्रहीत होते हैं Brackets.app/extensions/default, और जब आप ऐप बंडल को बदलते हैं तो ये खो जाते हैं, लेकिन सबसे आसान तरीका यह होगा कि आप पुराने बंडल से नए को प्लग इन कॉपी करें।
कालेब जू


एक ही रास्ता मैं एक एकल पीपा उन्नत करने के लिए मिल गया है करने के लिए है brew cask uninstall my-cool-caskतो brew cask install my-cool-cask
एरॉन ग्रे

जवाबों:


292

अब अंततः Homebrew Cask के लिए एक आधिकारिक अपग्रेड तंत्र है ( कार्यान्वयन के लिए समस्या 3396 देखें )! इसका उपयोग करने के लिए, बस इस कमांड को चलाएं:

brew cask upgrade

हालाँकि यह उन कैक्स को अपडेट नहीं करेगा जिनमें वर्जनिंग इन्फॉर्मेशन ( version :latest) या एप्लिकेशन नहीं हैं जिनमें बिल्ट-इन अपग्रेड मैकेनिज्म ( auto_updates true) हो। इन पीपों को फिर से स्थापित करने के लिए (और यदि उन्नयन उपलब्ध है तो उन्हें अपग्रेड करें), --greedyइस तरह से ध्वज के साथ अपग्रेड कमांड चलाएं :

brew cask upgrade --greedy


3
मेरे उत्तर की नकल करने के लिए @mipadi को नीचे दिए गए एक भी उद्धृत या उत्थान के बिना। वैसे भी अब यह पूरा होता दिख रहा है।
enrico.bacis

3
@ enrico.bacis: चिल। मैंने आपका उत्तर नहीं देखा, और यह एक स्पष्ट जोड़ है। (और रिकॉर्ड के लिए, आपको एक नया जोड़ने के बजाय इस उत्तर को संपादित करना चाहिए।)
मिपाडी

2
यह वास्तव में मुझे परेशान कर रहा है इसलिए मैंने सभी ब्रू एप्स को अपडेट करने के लिए यह स्क्रिप्ट बनाई है और उपयोगकर्ता को यह चुनने की अनुमति देता है कि कौन सी कास्क्स एप्स को अपडेट करना है। आप ऐप्स को विचार से भी बाहर कर सकते हैं। github.com/derrekyoung/ScriptsAndUtils/blob/master/…
Derrek

14
अब आप brew cask outdated | xargs brew cask reinstallकेवल पुराने पीपों को पुनः स्थापित करने के लिए उपयोग कर सकते हैं ।
phdoerfler

2
यह नोट करना महत्वपूर्ण है, कि brew cask outdatedकेवल उन ऐप्स के नाम प्रिंट करता है जिनके पास "ऑटो-अपडेट" सक्षम नहीं है। सभी क्षुधा है कि पुराने हो गए हैं, उपयोग अपग्रेड करने के लिएbrew cask outdated --greedy --verbose | grep -v '(latest)' | awk '{print $1}' | xargs brew cask reinstall
JMK

48

homebrew-पीपा-अपग्रेड

मुझे लगता है कि पीपे के उन्नयन के लिए यह अब तक का सबसे अच्छा उपाय है।
source: https://github.com/buo/homebrew-cask-upgrad

स्थापना और उपयोग

brew tap buo/cask-upgrade
brew update
brew cu

(वैकल्पिक) नवीनतम के रूप में चिह्नित लोगों सहित पुरानी ऐप्स को अपग्रेड करें:

brew cu --all

@XingangHuang हाँ
ओवोनिया

26

इसके साथ स्थापित पीपों को सूचीबद्ध करना संभव है:

brew cask list

और के साथ एक पीपा की फिर से स्थापना के लिए मजबूर:

brew cask install --force CASK_NAME

तो पहले कमांड के आउटपुट को दूसरे में पाइप करते हुए, हम सभी पीक को अपडेट करते हैं:

brew cask list | xargs brew cask install --force

1
यह वास्तव में पीपों को अद्यतन नहीं करता है। यह पुनर्स्थापना के लिए मजबूर करता है, यहां तक ​​कि ऐसे पीपों के लिए भी, जिनके पास कोई अद्यतन उपलब्ध नहीं है। आपके द्वारा कितने पीक लगाए गए हैं और वे कितने समय तक स्थापित किए गए हैं, इस पर निर्भर करते हुए, यह अनावश्यक डाउनलोड को ट्रिगर कर सकता है, बहुत समय ले सकता है और सूडो एक्सेस के लिए संकेत देता है।
बुरहान अली

20

पैकेज अपग्रेड करने के लिए स्क्रिप्ट को बैश करें

पास्कल उत्तर से प्रेरित है

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

यह क्या करता है

  • अद्यतन काढ़ा / काढ़ा पीसा, सफाई
  • पीपा सूची पढ़ें
  • brew cask infoनवीनतम संस्करण के लिए जाँच करें
  • यदि उपलब्ध हो तो नया संस्करण स्थापित करें (और सभी पुराने संस्करणों को हटा दें!)

स्रोत: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b

अधीर के लिए एक लाइनर:

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

के रूप में सहेजें /usr/local/bin/cask-upgrade , ताकि आप इसे स्थानीय रूप से cask-upgradeबाद में चला सकें


तुम बस नहीं कर सकते brew cask info $cask | grep "Not installed"?
डेट

@ हेत ... ठीक है मैंने इसे नहीं देखा, लेकिन मैं अब करता हूं। वैसे मैं इसे अगले संस्करण में कर सकता हूं ;-)
Atais

1
$ brew cask info $cask | grep "Not installed"त्रुटि देता हैError: This command requires a Cask token
eduncan911

1
@ eduncan911 आप स्क्रिप्ट के साथ इसका इस्तेमाल करने के बादfor cask in ${casks[@]}; do
Det

smacks headजाहिर है! विश्वास नहीं कर सकता कि मैं पकड़ नहीं था।
eduncan911

11

दिसंबर 2017 तक उपयोग: काढ़ा पीक अपग्रेड

[दिसंबर २०१ since के बाद से शुरू हुआ जब होमब्रे ने पीक के लिए अपग्रेड कमांड की शुरुआत की] मैं बस निम्नलिखित का उपयोग करता हूं:

brew cask outdated | xargs brew cask reinstall


मूल रूप से मैं भी क्या करता हूं, सिवाय इसके कि मैं awk '{print $1}'दोनों के बीच में पाइपिंग कर रहा हूं ।
पॉल नेल्सन बेकर

6

इस फ़ंक्शन को मैंने इसे संभालने के लिए लिखा है। ध्यान दें कि मैं व्यक्तिगत रूप से यह नहीं चाहता था कि मैं आँख बंद करके फिर से सब कुछ स्थापित करूँ क्योंकि कुछ पीपे का उपयोग करने के लिए मुझे थोड़ी देर लगानी पड़ती है या किसी और प्रॉम्प्टिंग की आवश्यकता होती है।

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 चला रहा हूं, लेकिन जब मैंने इस फ़ंक्शन का परीक्षण किया, तो मैंने शेल को त्रुटियों को फेंक दिया, क्योंकि - फ़ंक्शन नामों में अनुमत चरित्र नहीं है । महत्वपूर्ण अंतर - यद्यपि यह बाश में काम करता है, इसलिए इसे श के लिए अस्वीकृत कर दिया जाता है, यदि आप कई शेल के साथ सिस्टम में संगतता के लिए #! / Bin / sh का उपयोग कर रहे हैं तो यह काम नहीं करेगा। हालाँकि, अंडरफ़ोर्स के लिए हाइफ़न बदलना ठीक काम करता है।
ब्रायन 'बीजे' हॉफपॉयर जूनियर

5

@Atais के उत्तर के आधार पर, मैंने कुछ अच्छे लोगों में उनके तर्क को बढ़ाया है। मैं पहले उन्नत करने के लिए पैकेजों का निरीक्षण करने का एक तरीका चाहता था, वास्तव में उन्नयन के लिए मजबूर करने से पहले।

  • $ brew-cask.shहोमब्रे के समान आउटपुट को सूचीबद्ध करता है brew update
  • ऊपर दी गई सूची सभी पैकेजों को दिखाती है, जिसमें हरे रंग का कोई भी अपडेट लंबित है।
  • $ brew-cask.sh upgrade उन पैकेजों के उन्नयन के लिए बाध्य करेगा।

कोड:

# 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

बस इसे स्थापित करें (उर्फ "मुझे इसकी आवश्यकता है!")

यह मेरे .dotfilesरेपो में जांचा गया है ; इसलिए, आप इसे जल्दी से अपने ~/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

फिर इसे इस तरह उपयोग करें:

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

यदि आप ~/binअपने रास्ते में नहीं हैं , ~/bin/तो उपरोक्त कथनों में उपसर्ग करें।


5

brew cask upgrade

upgradeआदेश हाल ही में Homebrew पीपा में शुरू किया गया है और अन्य उत्तर में वर्णित अन्य सभी मैन्युअल विधियों का बहिष्कार करना चाहिए।


हालांकि यह कमांड मौजूद है, यह वास्तव में कई पैकेज को अपग्रेड नहीं करता है।
एक्यूमेनस

4

मुझे लगता है का उपयोग कर

brew cask reinstall `brew cask outdated`

चाल चलेगा। यह एप्लिकेशन के पिछले संस्करण को हटाने में भी मदद करेगा और नए संस्करण को स्थापित करेगा।


2
यह अब होना चाहिएbrew cask reinstall `brew cask outdated`
gbonetti

1
अपडेट @gbonetti के लिए धन्यवाद। तुम सही हो। नए "आउटडेटेड" विकल्प के साथ, कार्य आसान और तेज़ हो जाता है साथ ही :-)।
प्रणब अग्रवाल

2

deinspanjer से प्रदान किए गए कोड में सुधार करते हुए , मैंने एक नोओप कमांड की नकल करने की कोशिश की, जैसे कि चॉकलेट ( चोको अपडेट --noop / choco आउटडेटेड ) से।

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

जैसा कि एक देख सकता हूं, मैं एक मॉड्यूलर दृष्टिकोण का उपयोग कर रहा हूं क्योंकि मेरा उपयोग मामला थोड़ा अलग है। मैं अपने कंप्यूटर के सामने नहीं बैठना चाहता हूं और मेरे द्वारा इंस्टॉल किए गए प्रत्येक ऐप के लिए हां / नहीं टाइप करता हूं। हालांकि काक्स को अपग्रेड करने का कोई वास्तविक तरीका नहीं है (केवल नवीनतम संस्करण को फिर से इंस्टॉल करें), मैं सबसे पहले जानकारी को अपडेट करने के लिए काढ़ा अपडेट करता हूं कि वास्तव में अपडेट उपलब्ध हैं

इसके बाद, मैं अपनी जानकारी प्रदर्शित करने के लिए सभी पीपे के माध्यम से साइकिल चलाता हूं। क्योंकि मैंने पहले काढ़ा अपडेट किया था, अब एक जानकारी दी गई है कि कुछ पीपा का नवीनतम संस्करण स्थापित नहीं है।

मेरे अद्यतन विधि के अंदर, मैं वास्तव में उस विशिष्ट लाइन के लिए सूचना कमांड को पार्स करता हूं:

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

जो अनुवाद करता है: "जब भी आप" लाइन स्थापित नहीं करते हैं "पढ़ी गई जानकारी के ऊपर दी गई 3 पंक्तियाँ दें। फिर किसी भी पंक्ति को हटा दें, जिसमें एक कड़ी है, उसमें एक ':' वाली पंक्ति को भी हटा दें।"

काढ़ा पीपा जानकारी कमान की संरचना को देखते हुए, हम एक पंक्ति (कोई संस्करण जानकारी, कोई ऐप URL) के साथ समाप्त नहीं होते हैं, जो कि पीपा के वास्तविक नाम को दर्शाता है जिसे इसके साथ भी स्थापित किया गया था।

काढ़ा पीपा जानकारी उत्पादन

मेरे संस्करण में, यह जानकारी अब प्रिंट की गई है, ताकि कोई आसानी से देख सके कि पीपे किस तारीख से बाहर हैं और उन्हें अपडेट किया जा सकता है।

इस बिंदु पर मैं एक स्विच केस करता हूं, क्योंकि शायद अभी चीजों को अपडेट करने के लिए पर्याप्त समय नहीं है। यह आपके उपयोग-मामले पर निर्भर करता है। मेरे लिए, मैं कभी-कभी यह देखना चाहता हूं कि नया क्या है (नए संस्करण की प्रतीक्षा कर रहा है, बगफिक्स) लेकिन वास्तव में चीजों को अपडेट करने का समय नहीं है क्योंकि अभी मैं अपना ब्राउज़र बंद नहीं करना चाहता हूं आदि।

इसलिए यदि कोई "हाँ" के लिए विरोध करता है, तो काक्स के साफ किए गए नामों की सूची अपडेट फ़ंक्शन को दी जाती है, जहां प्रत्येक पीक के लिए जिसे पुनर्स्थापना जारी होने की तारीख निर्धारित की गई थी।

फिर से deinspanjer के लिए धन्यवाद, अपने लिए इस मुद्दे को हल करने की कोशिश करते हुए, मैं हमेशा पहले से ही काढ़ा अपडेट जारी करना भूल गया था, इसलिए वास्तव में पार्स (मेरे पूरे दृष्टिकोण की नींव) में कोई "स्थापित नहीं" लाइन नहीं थी।

मुझे आशा है कि यह मददगार था।


2

मैंने खुद से ऐसी स्क्रिप्ट बनाई। कृपया github https://github.com/pesh1983/brew_cask_upgrad को देखें । इसमें बहुत अच्छा वर्णन है, लेकिन अगर आपके पास कोई अतिरिक्त प्रश्न है, तो मुझसे पूछने के लिए स्वतंत्र महसूस करें। यह उचित उन्नयन करता है: स्थापना रद्द करें और स्थापित करें, इसलिए किसी भी आवश्यक सफाई को 'काढ़ा' द्वारा ही किया जाएगा।



2

पुराने कांड प्राप्त करें:

काढ़ा पीसा पुराना

उन्नयन पीपा:

काढ़ा पीसा पुराने-पीक पुन: स्थापित

डेमो स्क्रिप्ट:

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

1

मैंने जो पढ़ा है, उसके आधार पर मैंने एक स्क्रिप्ट बनाई है जो एक फाइल बनाएगी जो उन फाइलों को सूचीबद्ध करती है जिनमें उन ऐप्स को अपडेट किया जाना चाहिए जिन्हें नवीनतम के रूप में परिभाषित किया गया है। फिर आप अपनी आवश्यकताओं के अनुरूप फ़ाइल को संशोधित कर सकते हैं और मेरे ऑल्टिन स्क्रिप्ट का उपयोग करके अपडेट स्थापित कर सकते हैं।

अधिक जानकारी के लिए मेरे github पर जाएँ।

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


1

यह वास्तव में मुझे परेशान कर रहा है इसलिए मैंने सभी ब्रू एप्स को अपडेट करने के लिए यह स्क्रिप्ट बनाई है और उपयोगकर्ता को यह चुनने की अनुमति देता है कि कौन सी कास्क्स एप्स को अपडेट करना है। आप ऐप्स को विचार से भी बाहर कर सकते हैं।

https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh


1

मैं उपयोग करता हूं

brew cask install --force `brew cask list`

1

पुराने कांडों की जाँच करें:

काढ़ा पीसा पुराना

सभी पुराने पीपा को अपग्रेड करना:

काढ़ा पीसा उन्नयन

यदि आप विशिष्ट पीपे को अपग्रेड करना चाहते हैं, तो अपग्रेड के बाद बस पीपा-नाम जोड़कर (उदा: 4k-video-downloader):

काढ़ा पीक 4k- वीडियो-डाउनलोडर का उन्नयन


2
नमस्ते, StackOverflow में आपका स्वागत है। यह देखते हुए कि यह कई उत्तरों के साथ एक पुराना प्रश्न है, जिनमें से एक अत्यंत लोकप्रिय और स्वीकृत दोनों है, कृपया अपने उत्तर को संपादित करें कि यह प्रश्न का उत्तर कैसे देता है और मौजूदा उत्तरों के लिए बेहतर क्यों है। धन्यवाद।
मंडीशिव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.