มีวิธีใดที่จะอัปเกรดทั้งหมดbrew cask
หรือไม่ สิ่งที่ชอบbrew cask upgrade
?
มีวิธีใดที่จะอัปเกรดทั้งหมดbrew cask
หรือไม่ สิ่งที่ชอบbrew cask upgrade
?
คำตอบ:
แรงบันดาลใจจากคำตอบ 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
ภายหลัง
brew cask uninstall --force
ก่อนที่จะติดตั้งเวอร์ชันใหม่หากคุณไม่ต้องการให้มีรุ่นเก่าอยู่
ฉันคิดว่านี่เป็นทางออกที่ดีที่สุดในการอัพเกรดถัง
แหล่งที่มา: https://github.com/buo/homebrew-cask-upgrade
การติดตั้งและการใช้งาน
brew tap buo/cask-upgrade
brew update
brew cu
(ไม่บังคับ) บังคับอัปเกรดแอปที่ล้าสมัยรวมถึงแอปที่ทำเครื่องหมายว่าล่าสุด:
brew cu --all
ตามที่อ้างถึงในคำตอบอื่น ๆ กล่าวว่าขณะนี้ยังไม่มีวิธีอัปเกรดถังที่อัปเดตทั้งหมด
ส่วนที่สองของคำตอบนั้นผิด แต่: brew upgrade --all
ไม่สามารถอัพเกรดถังได้
วิธีเดียวที่จะอัปเกรดถังทั้งหมดคือรับรายการถังที่ติดตั้งและบังคับให้ติดตั้งถังใหม่ - รวมถึงถังที่ไม่ได้เปลี่ยน!
ในปลาคุณสามารถทำสิ่งนี้ได้:
for app in (brew cask list)
brew cask install --force $app
end
แก้ไข:
Atais สร้างสคริปต์ที่ทำงาน: ทุบตีสคริปต์เพื่ออัพเกรดแพคเกจ
โปรดโหวตคำตอบของเขามากกว่าคำตอบนี้
brew cask update
จากนั้นทำตามคำตอบก่อนหน้านี้เพื่ออัปเกรดเฉพาะแพ็คเกจที่ล้าสมัยที่นี่: apple.stackexchange.com/a/231020/49601
จากhomebrew cask
เอกสาร :
เนื่องจากพื้นที่เก็บข้อมูล homebrew-ถังเป็น Homebrew
brew update
แตะคุณจะดึงลงมาล่าสุดถังทุกครั้งที่คุณออกคำสั่ง ปัจจุบัน homebrew-cask ไม่สามารถตรวจพบได้ตลอดเวลาว่าแอปพลิเคชันได้รับการปรับปรุงหรือไม่brew cask install --force
คุณสามารถบังคับให้มีการปรับปรุงผ่านคำสั่ง เรากำลังพยายามปรับปรุงสิ่งนี้
ต่อไปนี้ควรเพียงพอที่จะอัพเกรดทั้งสูตรการชงและถัง
brew upgrade --all
brew upgrade --all
เทียบเท่ากับbrew upgrade
ตอนนี้ ถังไม่ได้รับการอัพเกรดโดยคำสั่งนั้น
นี่คือสิ่งที่ฉันมีใน. 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)
}
หากต้องการติดตั้งแอพชงใหม่ถังใน 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
ก่อน
สิ่งนี้ทำให้ฉันโกรธมากดังนั้นฉันจึงสร้างสคริปต์นี้เพื่ออัปเดตแอป Brew ทั้งหมดและอนุญาตให้ผู้ใช้เลือกแอพ Cask ที่จะอัปเดต คุณสามารถแยกแอพออกจากการพิจารณาด้วย
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
ผมขอแนะนำให้คำตอบ @ eduncan911 ในคำถามคู่ในกองมากเกิน
ในระยะสั้น:
brew-cask.sh
รายการเพียงแค่ออกคล้ายกับ brew update
Homebrew รายการด้านบนแสดงแพ็คเกจทั้งหมดที่ติดตั้งโดยมีสีเขียว✔
แสดงว่ามีการอัปเดตใด ๆ ที่ค้างอยู่brew-cask.sh
upgrade จะบังคับให้อัพเกรดแพ็คเกจเหล่านั้นติดตั้งจาก 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
นี่อาจจะเหมาะสมกว่าในฐานะความคิดเห็น แต่ฉันไม่มีชื่อเสียงพอที่จะออกความเห็นดังนั้น ...
จากการเขียนนี้homebrew-cask
มีระบบการอัพเกรดของตัวเองดังนั้นจึงไม่จำเป็นต้องใช้สคริปต์และเครื่องมือของบุคคลที่สามอีกต่อไป
ในการแสดงรายการถังที่ล้าสมัย: brew cask outdated
ในการอัพเกรดถังที่ล้าสมัยทั้งหมด: 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