Відповіді:
натхненний відповіддю Паскаля
#!/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 створив сценарій, який працює: Bash script для оновлення пакетів .
Будь ласка, підкажіть його відповідь, а не цю.
brew cask update
а потім дотримуйтесь попередньої відповіді, щоб оновити лише ті пакети, які наразі застаріли тут: apple.stackexchange.com/a/231020/49601
Оскільки сховище homebrew-cask - це Homebrew Tap, ви знімаєте найновіші Casks щоразу, коли ви видаєте звичайну команду Homebrew
brew update
. В даний час, домашній-cask не завжди може виявити, чи додаток було оновлено. Ви можете примусити оновлення за допомогою командиbrew cask install --force
. Ми працюємо над покращенням цього.
Наступного має бути достатньо для оновлення як формул, так і бочок.
brew upgrade --all
brew upgrade --all
еквівалентно brew upgrade
нині. Ця команда не модернізується.
Ось що я маю в своєму .bash_profile, який я запускаю, щоб зробити повний перехід на домашню мову. Я "пришпилюю" кілька елементів, щоб гігантські завантаження не повторювалися для кожного оновлення, оскільки їх версії завжди "найновіші" або їх не слід оновлювати.
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
. у наведеному вище списку показані всі встановлені пакети, зеленим кольором із ✔
зазначенням будь-яких очікуючих оновлень.brew-cask.sh
upgrade змусить оновити ці пакети.Встановити з його репо з:
$ 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
Такий сценарій я створив сам. Перегляньте https://github.com/pesh1983/brew_cask_upgrade github . Він має досить хороший опис, але якщо у вас є додаткові запитання, не соромтеся запитати мене. Це справедливе оновлення: видаліть та встановіть, тому будь-яке необхідне очищення виконуватиме сам «варити».
Це, мабуть, буде більш доречним як коментар, але мені не вистачає репутації, щоб залишити його, так що ...
З цього письма 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