Câu trả lời:
lấy cảm hứng từ câu trả lời của 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
Những gì nó làm
brew cask info
phiên bản mới nhấtnguồn: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b
Một lót cho thiếu kiên nhẫn:
curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin
lưu dưới dạng /usr/local/bin/cask-upgrade
, để bạn có thể chạy nó cục bộ như cask-upgrade
sau
brew cask uninstall --force
trước khi cài đặt phiên bản mới nếu bạn không muốn phiên bản cũ ở đó.
Tính đến tháng 12 năm 2017, brew cask upgrade
là một điều.
Tôi nghĩ rằng đây là giải pháp tốt nhất để nâng cấp các thùng.
nguồn: https://github.com/buo/homebrew-cask-upTHER
Cài đặt và sử dụng
brew tap buo/cask-upgrade
brew update
brew cu
(Tùy chọn) Buộc nâng cấp các ứng dụng lỗi thời bao gồm những ứng dụng được đánh dấu là mới nhất:
brew cu --all
Như trích dẫn trong câu trả lời khác nói, hiện tại không có cách nào để nâng cấp tất cả các bản cập nhật.
Mặc dù vậy, phần thứ hai của câu trả lời là sai: brew upgrade --all
không thể nâng cấp thùng.
Cách duy nhất để nâng cấp tất cả các nhóm là lấy danh sách các nhóm đã cài đặt và buộc chúng phải được cài đặt lại - bao gồm cả các nhóm không thay đổi!
Ở cá , bạn có thể làm như thế này:
for app in (brew cask list)
brew cask install --force $app
end
chỉnh sửa:
Atais đã tạo ra một tập lệnh hoạt động: Tập lệnh Bash để nâng cấp các gói .
Hãy nêu lên câu trả lời của anh ấy chứ không phải cái này.
brew cask update
sau đó làm theo phản hồi trước đó để chỉ nâng cấp các gói hiện đã hết hạn tại đây: apple.stackexchange.com/a/231020/49601
Vì kho lưu trữ homebrew-cask là Homebrew Tap, bạn sẽ kéo xuống các Casks mới nhất mỗi khi bạn phát lệnh Homebrew thông thường
brew update
. Hiện tại, homebrew-thùng không thể luôn luôn phát hiện nếu Ứng dụng đã được cập nhật. Bạn có thể buộc cập nhật thông qua lệnhbrew cask install --force
. Chúng tôi đang làm việc để cải thiện điều này.
Những điều sau đây là đủ để nâng cấp cả công thức pha chế và thùng.
brew upgrade --all
brew upgrade --all
tương đương với brew upgrade
bây giờ Casks không được nâng cấp bởi lệnh đó.
Đây là những gì tôi có trong .bash_profile mà tôi chạy để thực hiện một bản nâng cấp đầy đủ của homebrew. Tôi "ghim" một vài mục để giữ cho các bản tải xuống khổng lồ không bị tải xuống liên tục cho mỗi bản cập nhật, vì các phiên bản của chúng luôn là "mới nhất" hoặc chúng không nên được nâng cấp.
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)
}
Để cài đặt lại ứng dụng ủ bia trong zsh:
brew cask update;
for app in $(brew cask list); do
brew cask uninstall --force ${app}
brew cask install --force ${app}
done
brew cask
cài đặt yêu cầu đầu vào của người dùng (ví dụ: thạch anh) . Ngoài ra, không cần thiết phải gỡ cài đặt mọi ứng dụng trước khi cài đặt lại. Tốt nhất bạn cũng nên chạy một bản cập nhật như brew cask update
trước.
Điều này thực sự làm tôi khó chịu vì vậy tôi đã tạo tập lệnh này để cập nhật tất cả các ứng dụng Bia và cho phép người dùng chọn ứng dụng Cask nào để cập nhật. Bạn cũng có thể loại trừ các ứng dụng khỏi sự cân nhắc.
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upTHER.sh
Tôi khuyên bạn nên trả lời @ eduncan911 trong câu hỏi đối tác trên Stack Overflow .
Nói ngắn gọn:
brew-cask.sh
chỉ liệt kê một đầu ra tương tự như của Homebrew brew update
. danh sách trên hiển thị tất cả các gói được cài đặt, với màu xanh lục ✔
cho biết mọi cập nhật đang chờ xử lý.brew-cask.sh
nâng cấp sẽ buộc nâng cấp các gói đó.Cài đặt từ repo của mình với:
$ 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
Sau đó sử dụng nó như thế này:
$ brew-cask.sh
$ brew-cask.sh upgrade
Tôi tự làm kịch bản như vậy. Vui lòng xem github https://github.com/pesh1983/brew_cask_upTHER . Nó có mô tả khá tốt, nhưng nếu bạn có bất kỳ câu hỏi nào khác, vui lòng hỏi tôi. Nó thực hiện nâng cấp công bằng: gỡ cài đặt và cài đặt, do đó, mọi thao tác dọn dẹp cần thiết sẽ được thực hiện bởi chính 'brew'.
Điều này có lẽ sẽ phù hợp hơn khi là một nhận xét, nhưng tôi không có đủ danh tiếng để để lại một bình luận, vì vậy ...
Theo văn bản này, homebrew-cask
có hệ thống nâng cấp riêng của mình và do đó, các tập lệnh và công cụ của bên thứ ba không còn cần thiết nữa.
Để liệt kê các thùng lỗi thời: brew cask outdated
Để nâng cấp tất cả các thùng lỗi thời: 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