มีวิธีใดในการอัปเกรดถังชง


37

มีวิธีใดที่จะอัปเกรดทั้งหมดbrew caskหรือไม่ สิ่งที่ชอบbrew cask upgrade?

คำตอบ:


23

Bash script เพื่ออัพเกรดแพ็คเกจ

แรงบันดาลใจจากคำตอบ 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

มันทำอะไร

  • ปรับปรุงถังชง / ชงทำความสะอาด
  • อ่านรายการถัง
  • ตรวจสอบ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ภายหลัง


ทำงานเหมือนจับใจ น่าจะดีสำหรับการค้นหารายการก่อนแพคเกจล้าสมัยก่อนว่า ง่ายพอที่จะปรับแต่งสคริปต์เพื่อทำ
eduncan911

ขอขอบคุณ! คุณได้ลองบูรณาการนี้ลงใน Homebrew Cask โดยตรงหรือไม่ ฉันเพิ่งแปลงมันเป็นปลาและมันก็ใช้ได้กับฉันเช่นกัน มันยังเผยให้ฉันเห็นว่าบางรุ่นเก่ายังคงปรากฏหลังจากที่ฉันติดตั้งรุ่นปัจจุบัน
ปาสกาล

คุณต้องเรียกใช้brew cask uninstall --forceก่อนที่จะติดตั้งเวอร์ชันใหม่หากคุณไม่ต้องการให้มีรุ่นเก่าอยู่
ปาสกาล

@ ปาสกาลใช่ฉันสังเกตเห็นว่าฉันมีรุ่นเก่ามากมายซ้อนกันที่นี่ด้วย ฉันจะเพิ่มคำสั่งถอนการติดตั้งในไม่ช้า
Atais

@Atais การยกเลิกการติดตั้งยังคงใช้ได้ผลกับคุณหรือไม่ ตอนนี้ถังบางตัวทิ้งโฟลเดอร์ว่างไว้พร้อมกับหมายเลขเวอร์ชั่นด้วยสคริปต์ของฉันซึ่งยุ่งกับการตรวจสอบเวอร์ชั่น
ปาสกาล


19

homebrew-ถังอัพเกรด

ฉันคิดว่านี่เป็นทางออกที่ดีที่สุดในการอัพเกรดถัง
แหล่งที่มา: https://github.com/buo/homebrew-cask-upgrade

การติดตั้งและการใช้งาน

brew tap buo/cask-upgrade
brew update
brew cu

(ไม่บังคับ) บังคับอัปเกรดแอปที่ล้าสมัยรวมถึงแอปที่ทำเครื่องหมายว่าล่าสุด:

brew cu --all

12

ตามที่อ้างถึงในคำตอบอื่น ๆ กล่าวว่าขณะนี้ยังไม่มีวิธีอัปเกรดถังที่อัปเดตทั้งหมด

ส่วนที่สองของคำตอบนั้นผิด แต่: brew upgrade --allไม่สามารถอัพเกรดถังได้

วิธีเดียวที่จะอัปเกรดถังทั้งหมดคือรับรายการถังที่ติดตั้งและบังคับให้ติดตั้งถังใหม่ - รวมถึงถังที่ไม่ได้เปลี่ยน!

ในปลาคุณสามารถทำสิ่งนี้ได้:

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

แก้ไข:

Atais สร้างสคริปต์ที่ทำงาน: ทุบตีสคริปต์เพื่ออัพเกรดแพคเกจ
โปรดโหวตคำตอบของเขามากกว่าคำตอบนี้


1
โปรดทราบว่ามันจะติดตั้งแอปทั้งหมดของคุณจริง ๆ ไม่ใช่แค่อัปเดตที่ล้าสมัย :(
Atais

1
ในการอัปเกรดรายชื่อถังคุณควรเรียกใช้brew cask updateจากนั้นทำตามคำตอบก่อนหน้านี้เพื่ออัปเกรดเฉพาะแพ็คเกจที่ล้าสมัยที่นี่: apple.stackexchange.com/a/231020/49601
Danijel-James W

@ Danijel-JamesW ฉันย้อนกลับการเปลี่ยนแปลงของคุณเพราะมันผิด อาจเป็นวิธีที่จะทำในเปลือกหอยอื่น ๆ แต่มันไม่ได้อยู่ในปลา
ปาสกาล

10

จากhomebrew caskเอกสาร :

เนื่องจากพื้นที่เก็บข้อมูล homebrew-ถังเป็น Homebrew brew updateแตะคุณจะดึงลงมาล่าสุดถังทุกครั้งที่คุณออกคำสั่ง ปัจจุบัน homebrew-cask ไม่สามารถตรวจพบได้ตลอดเวลาว่าแอปพลิเคชันได้รับการปรับปรุงหรือไม่ brew cask install --forceคุณสามารถบังคับให้มีการปรับปรุงผ่านคำสั่ง เรากำลังพยายามปรับปรุงสิ่งนี้

ต่อไปนี้ควรเพียงพอที่จะอัพเกรดทั้งสูตรการชงและถัง

brew upgrade --all 

4
นี่ไม่เป็นความจริงอีกต่อไป brew upgrade --allเทียบเท่ากับbrew upgradeตอนนี้ ถังไม่ได้รับการอัพเกรดโดยคำสั่งนั้น
proski

6

นี่คือสิ่งที่ฉันมีใน. bash_profile ที่ฉันใช้เพื่อทำการอัพเกรดผ่านแบบเต็มของ homebrew ฉัน "ปักหมุด" สองสามรายการเพื่อป้องกันการดาวน์โหลดขนาดยักษ์จากการดึงข้อมูลซ้ำ ๆ สำหรับการอัปเดตทุกครั้งเนื่องจากเวอร์ชันของพวกเขานั้นเป็น "ล่าสุด" เสมอ

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

หากต้องการติดตั้งแอพชงใหม่ถังใน zsh:

brew cask update;

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

นี้ไม่ได้เป็นสิ่งที่ดีมากสำหรับผู้ใช้ที่อาจมีจำนวนมากของbrew caskการติดตั้งที่ต้องป้อนข้อมูลผู้ใช้(เช่น - ควอทซ์) นอกจากนี้ไม่จำเป็นต้องถอนการติดตั้งทุกแอปพลิเคชันก่อนติดตั้งใหม่ เป็นการดีที่คุณควรเรียกใช้การอัปเดตเหมือนbrew cask updateก่อน
Danijel-James W

@ Danijel-JamesW น่าเสียดายที่ถ้าคุณไม่ต้องการให้รุ่นเก่าอยู่
ปาสกาล

1

สิ่งนี้ทำให้ฉันโกรธมากดังนั้นฉันจึงสร้างสคริปต์นี้เพื่ออัปเดตแอป Brew ทั้งหมดและอนุญาตให้ผู้ใช้เลือกแอพ Cask ที่จะอัปเดต คุณสามารถแยกแอพออกจากการพิจารณาด้วย

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


1

ผมขอแนะนำให้คำตอบ @ eduncan911 ในคำถามคู่ในกองมากเกิน

ในระยะสั้น:

  • $ brew-cask.shรายการเพียงแค่ออกคล้ายกับ brew updateHomebrew รายการด้านบนแสดงแพ็คเกจทั้งหมดที่ติดตั้งโดยมีสีเขียวแสดงว่ามีการอัปเดตใด ๆ ที่ค้างอยู่
  • $ brew-cask.shupgrade จะบังคับให้อัพเกรดแพ็คเกจเหล่านั้น

ติดตั้งจาก repo ของเขาด้วย:

$ 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

1

ฉันทำสคริปต์ด้วยตัวเอง โปรดดูที่ GitHub https://github.com/pesh1983/brew_cask_upgrade มันมีคำอธิบายที่ดี แต่ถ้าคุณมีคำถามเพิ่มเติมใด ๆ อย่าลังเลที่จะถามฉัน ทำการอัพเกรดอย่างเป็นธรรม: ถอนการติดตั้งและติดตั้งดังนั้นการล้างข้อมูลที่จำเป็นจะดำเนินการโดย 'ก่อ' เอง


1

นี่อาจจะเหมาะสมกว่าในฐานะความคิดเห็น แต่ฉันไม่มีชื่อเสียงพอที่จะออกความเห็นดังนั้น ...

จากการเขียนนี้homebrew-caskมีระบบการอัพเกรดของตัวเองดังนั้นจึงไม่จำเป็นต้องใช้สคริปต์และเครื่องมือของบุคคลที่สามอีกต่อไป

ในการแสดงรายการถังที่ล้าสมัย: brew cask outdated

ในการอัพเกรดถังที่ล้าสมัยทั้งหมด: 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

สิ่งนี้ไม่สามารถอ่านได้ - ต้องการคำอธิบายเกี่ยวกับสิ่งที่มันทำ
151019
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.