Обновите все бочки, установленные через Homebrew Cask
Я использую Домашняя Бочка для установки приложений на OS X. Как обновить все установленные бочки?
16 ответов
Обновление Декабря 2017
Я думал, что этого никогда не произойдет, но теперь, наконец, официальный механизм обновления для бочонка Homebrew (см. вопрос 3396 для реализации)! Чтобы использовать его, просто запустите эту команду:
brew cask upgrade
однако это не будет обновлять бочки, которые не имеют информации о версии (version :latest
) или приложения, которые имеют встроенный механизм обновления (auto_updates true
). Переустановить эти бочки (и следовательно, обновите их, если обновления доступны), запустите команду обновления с помощью --greedy
флаг такой:
brew cask upgrade --greedy
обновление марта 2017 (помните каламбур ;) (@polo)
Я нашел некоторые обновления, так как это было изначально ответил.
Для обходного пути теперь можно использовать brew cask reinstall
:
brew cask reinstall <cask_name>
brew cask list | xargs brew cask reinstall
проблема 4678, упомянутая в исходном ответе, была закрыта, и функция обновления теперь обсуждается в вопрос #29301 Существует также buo / homebrew-бочка-обновление, внешний пакет, который добавляет команду обновления в brew cask. Я успешно протестировал его на нескольких пакетах.
Оригинальный Ответ
нет официального метода для обновления бочек домашнего пива. В настоящее время эта работа ведется, но она еще очень далека от завершения. См.вопрос #4678 для получения более подробной информации. В этой проблеме также есть несколько примеров сценариев, которые пользователи используйте для обновления всех своих бочек. Самый простой способ обновить один бочонок - запустить brew cask install --force <cask_name>
, но просто знайте, что есть шанс, что это может вызвать проблемы с вашим приложением, так как он не будет правильно удален первым. Обычно это не проблема.
вы можете обновить все установленные бочки, используя следующую команду:
brew cask list | xargs brew cask install --force
на будущее, более подробную информацию можно найти в дублировать выпуск на github.
домашнее пиво-бочка-обновление
Я думаю, что это, безусловно, лучшее решение для обновления бочек.
источник: https://github.com/buo/homebrew-cask-upgrade
установка и использование
brew tap buo/cask-upgrade
brew update
brew cu
(необязательно) принудительное обновление устаревших приложений, включая те, которые помечены как последние:
brew cu --all
можно перечислить установленные бочки с:
brew cask list
и принудительно переустановить бочку с помощью:
brew cask install --force CASK_NAME
таким образом, конвейер вывода первой команды во вторую, мы обновляем все бочки:
brew cask list | xargs brew cask install --force
скрипт Bash для обновления пакетов
вдохновленный Паскаль ответа
#!/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:\ \(.*\)//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 / brew бочка, очистка
- прочитайте список бочонков
- Регистрация
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
позже
по состоянию на декабрь 2017 года использовать: обновление бочонка brew
[устарел с декабря 2017 года, когда Homebrew представил команду обновления для cask]
Я просто использую следующее:
brew cask outdated | xargs brew cask reinstall
вот функция, которую я написал для обработки этого. Обратите внимание, что я лично не хотел, чтобы он просто слепо переустановил все, так как некоторые из бочек, которые я использую, занимают некоторое время для установки или требуют дополнительного запроса.
brew-cask-upgrade() {
if [ "" != '--continue' ]; then
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
fi
for c in $(brew cask list); do
echo -e "\n\nInstalled versions of $c: "
ls /opt/homebrew-cask/Caskroom/$c
echo "Cask info for $c"
brew cask info $c
select ynx in "Yes" "No" "Exit"; do
case $ynx in
"Yes") echo "Uninstalling $c"; brew cask uninstall --force "$c"; echo "Re-installing $c"; brew cask install "$c"; break;;
"No") echo "Skipping $c"; break;;
"Exit") echo "Exiting brew-cask-upgrade"; return;;
esac
done
done
}
основываясь на ответе @Atais, я улучшил его логику во что-то более приятное. Я хотел, чтобы сначала проверить пакеты для обновления, прежде чем фактически форсировать обновление.
-
$ brew-cask.sh
просто списки выходной похож на доморощенного поbrew update
. - в списке выше показаны все установленные пакеты с зеленым
✔
указание ожидающих обновлений. -
$ brew-cask.sh upgrade
принудительное обновление этих пакеты.
код:
# Usage:
#
# $ brew update
# You should execute this first to update everything locally.
#
# $ brew-cask.sh [update]
# This will list all of your cask packages and rather there is an upgrade
# pending with a ✔ checkmark, just like Homebrew does with "brew update".
# The update command is optional, as it doesn't actually do any tracking, there's
# not really anything to "update" with cask. But it keeps with the pattern of
# of Homebrew's "brew update" pattern for those with memory muscle fingers (like me).
#
# $ brew-cask.sh upgrade
# This performs a "brew cask install <cask> --force" of all cask packages that have
# an update pending.
#
# This code was inspired by http://stackoverflow.com/a/36000907/56693
# get the list of installed casks
casks=( $(brew cask list) )
if [[ "" == "upgrade" ]]; then
for cask in ${casks[@]}; do
current="$(brew cask info $cask | sed -n '1p' | sed -n 's/^.*: \(.*\)$//p')"
installed=( $(ls /opt/homebrew-cask/Caskroom/$cask))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
echo "Upgrading $cask to v$current."
(set -x; brew cask install $cask --force;)
else
echo "$cask v$current is up-to-date, skipping."
fi
done
else
echo "Inspecting ${#casks[@]} casks. Use 'brew-cask.sh upgrade' to perform any updates."
for (( i = i ; i < ${#casks[@]} ; i++ )); do
current="$(brew cask info ${casks[$i]} | sed -n '1p' | sed -n 's/^.*: \(.*\)$//p')"
installed=( $(ls /opt/homebrew-cask/Caskroom/${casks[$i]}))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
casks[$i]="${casks[$i]}$(tput sgr0)$(tput setaf 2) ✔$(tput sgr0)"
fi
done
echo " ${casks[@]/%/$'\n'}" | column
fi
просто установите его (ака "мне нужно это сейчас!")
он зарегистрирован в мой .dotfiles
РЕПО; таким образом, вы можете быстро установить его на ваш ~/bin
С:
$ 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
если у вас нет ~/bin
на вашем пути, префикс ~/bin/
к вышеуказанным заявлениям.
Я думаю, что с помощью
brew cask reinstall `brew cask outdated`
будет делать трюк. Это также поможет удалить предыдущую версию / ы приложения и установить более новую версию.
brew cask upgrade
на upgrade
команда недавно была введена в Homebrew Cask и должна осуждать все другие ручные методы, описанные в других ответах.
улучшение предоставленного кода из deinspanjer, Я попытался имитировать команду noop, очень похожую на команду chocolatey (обновление choco --noop / Choco устарело).
#!/bin/sh
fetch(){
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
}
lookup() {
for c in $(brew cask list); do
brew cask info $c
done
}
update(){
var=$( lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1)
if [ -n "$var" ]; then
echo "The following installed casks have updates avilable:"
echo "$var"
echo "Install updates now?"
select yn in "Yes" "No"; do
case $yn in
"Yes") echo "updating outdated casks"; break;;
"No") echo "brew cask upgrade cancelled" ;return;;
*) echo "Please choose 1 or 2";;
esac
done
for i in $var; do
echo "Uninstalling $c"; brew cask uninstall --force "$i"; echo "Re-installing $i"; brew cask install "$i"
done
else
echo "all casks are up to date"
fi
}
fetch
update
Как видно, я использую модульный подход, так как мой вариант использования отличается немного. Я не хочу сидеть перед компьютером и вводить да/нет для каждого приложения, которое я установил. Пока нет реального способа модернизации бочки (просто переустановите новейшую версию), I сначала сделайте обновление brew, чтобы иметь информацию о том, что на самом деле доступны обновления.
затем я просматриваю все бочки, чтобы отобразить их информацию. Поскольку я сделал обновление brew раньше, теперь предоставляется информация о том, что последняя версия некоторых бочек не установлена.
внутри моего метода обновления я фактически анализирую команду info Для этой конкретной строки:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
что переводится как: "Дайте 3 строки выше информации, предоставляемой всякий раз, когда вы читаете строку"не установлен". Затем удалите любую строку, в которой есть ссылка, а также удалите строку, в которой есть":"."
учитывая структуру команды brew cask info, мы получаем одну строку (без информации о версии, без URL-адреса приложения), которая отражает фактическое имя бочонка, с которым он также был установлен.
в моей версии, эта информация сейчас распечатать таким образом, можно легко увидеть, какие бочки устарели и могут быть обновлены.
на данный момент я делаю случай переключения, потому что, возможно, прямо сейчас недостаточно времени для обновления вещей. Это зависит от вашего использования. Для меня иногда я просто хочу увидеть, что нового (ожидание новой версии, исправления), но на самом деле у меня нет времени обновлять вещи, потому что прямо сейчас я не хочу закрывать свой браузер и т. д.
поэтому, если выбрать "Да", список очищенных имен бочек будет передан функция обновления, в которой для каждого бочонка, который был определен как устаревший, выполняется переустановка.
еще раз спасибо deinspanjer, пытаясь решить эту проблему для себя, я всегда забывал выпустить обновление brew заранее, поэтому там не было" не установленной " строки, чтобы фактически разобрать (основа всего моего подхода).
Я надеюсь, что это было полезно.
Я сделал такой скрипт сам. Пожалуйста, посмотрите на github https://github.com/pesh1983/brew_cask_upgrade. Он имеет довольно хорошее описание, но если у вас есть какие-либо дополнительные вопросы, не стесняйтесь спрашивать меня. Он делает справедливое обновление: удаление и установка, поэтому любая необходимая очистка будет выполнена самим "brew".
устарели бочках:
brew бочка устарела
обновить бочковой:
заварить бочку переустановить устаревшую-бочку
демо-скрипт:
$ cat ~/bin/brew_cask_upgrade.sh
#!/bin/bash
red=$(tput setaf 1)
# green=$(tput setaf 2)
reset=$(tput sgr0)
(set -x; brew update;)
for cask in $(brew cask outdated | awk '{print }')
do
echo "${red}update ${cask} ...${reset}."
(set -x; brew cask install --force "$cask";)
done
echo "${red}brew clean up ...${reset}"
(set -x; brew cask cleanup;)
echo "${red}brew clean up done.${reset}"
на основе того, что я прочитал, я создал сценарий, который создаст файл, в котором перечислены файлы для обновления, включая приложения, которые определены как последние. Затем вы можете изменить файл в соответствии с вашими требованиями и установить обновления с помощью моего сценария olinst.
для получения дополнительной информации посетите мой github.
Это действительно раздражало меня, поэтому я создал этот скрипт, чтобы обновить все приложения Brew и позволить пользователю выбрать, какие приложения Cask для обновления. Вы также можете исключить приложения из рассмотрения.
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh