Ответы:
вдохновленный ответом Паскаля
#!/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
перед установкой новой версии, если вы не хотите, чтобы старая версия оставалась там.
По состоянию на декабрь 2017 года brew cask upgrade
это вещь.
Я думаю, что это лучшее решение для модернизации бочек.
источник: 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 для обновления пакетов .
Пожалуйста, подтвердите его ответ, а не этот.
brew cask update
затем выполнить предыдущий ответ, чтобы обновить только те пакеты, которые в данный момент устарели здесь: apple.stackexchange.com/a/231020/49601
Из homebrew cask
документации :
Поскольку репозиторий homebrew-cask - это Homebrew Tap, вы будете сбрасывать последние версии Casks каждый раз, когда будете вводить обычную команду 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)
}
Чтобы переустановить приложения brew cask в 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
просто выводит вывод, похожий на вывод Homebrew 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
Я сделал такой скрипт сам. Пожалуйста, посмотрите на github https://github.com/pesh1983/brew_cask_upgrade . У него довольно хорошее описание, но если у вас есть дополнительные вопросы, не стесняйтесь их задавать. Обновление справедливо: удалите и установите, поэтому вся необходимая очистка будет выполняться самим brew.
Это, вероятно, будет более уместным в качестве комментария, но у меня недостаточно репутации, чтобы оставить комментарий, так что ...
На момент написания этой статьи 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