Я использую Homebrew Cask для установки приложений на OS X. Как обновить все установленные контейнеры?
Обновите все боксы, установленные через Homebrew Cask
Ответ 1
Обновление за декабрь 2017
Я думал, что этого никогда не произойдет, но теперь наконец-то появился официальный механизм обновления для Homebrew Cask (см. " Выпуск 3396")! Чтобы использовать его, просто запустите эту команду:
brew cask upgrade
Однако это не приведет к обновлению бочек, не имеющих информации о version :latest
(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-cask-upgrade, внешний пакет, который добавляет команду обновления в brew cask. Я успешно протестировал несколько пакетов.
Оригинальный ответ
Не существует официального метода обновления доморощенных бочек. Это в настоящее время работает над, но это все еще очень далеко от завершения. Смотрите Issue # 4678 для более подробной информации. Эта проблема также имеет несколько примеров сценариев, которые пользователи используют для обновления всех своих бочек. Самый простой способ обновить одну бочку - запустить brew cask install --force <cask_name>
, но просто знайте, что есть вероятность, что это может вызвать проблемы с вашим приложением, поскольку оно не будет должным образом удалено в первую очередь. Обычно это не проблема, хотя.
Вы можете обновить все установленные бочки, используя следующую команду оболочки:
brew cask list | xargs brew cask install --force
Для дальнейшего использования, более подробную информацию можно найти в повторяющемся выпуске на github.
Ответ 2
доморощенного-бочка-обновление
Я думаю, что это, безусловно, лучшее решение для обновления бочек.
источник: https://github.com/buo/homebrew-cask-upgrade
Установка и использование
brew tap buo/cask-upgrade
brew update
brew cu
(Необязательно) Принудительное обновление устаревших приложений, включая те, которые были отмечены как последние:
brew cu --all
Ответ 3
Можно указать список установленных контейнеров:
brew cask list
И принудительно переустановите бокс с помощью:
brew cask install --force CASK_NAME
Таким образом, выводя первую команду во вторую, мы обновляем все боксы:
brew cask list | xargs brew cask install --force
Ответ 4
Bash script для обновления пакетов
вдохновленный Pascal answer
#!/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
Что он делает
- update brew/заварить бочку, очистить
- прочитайте список casks
- проверьте
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
позже
Ответ 5
По состоянию на декабрь 2017 года: brew обновление контейнера
[DEPRECATED с декабря 2017 года, когда Homebrew представил команду обновления для контейнера]
Я просто использую следующее:
brew cask outdated | xargs brew cask reinstall
Ответ 6
Вот функция, которую я написал для обработки этого. Обратите внимание, что я лично не хотел, чтобы он просто слепо переустанавливал все, поскольку некоторые из используемых мной контейнеров требуют времени для установки или требуют дополнительного запроса.
brew-cask-upgrade() {
if [ "$1" != '--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
}
Ответ 7
brew cask upgrade
Команда upgrade
была недавно введена в Homebrew Cask и должна обесценить все другие ручные методы, описанные в других ответах.
Ответ 8
Основываясь на ответе @Atais, я улучшил его логику во что-то приятнее. Я хотел, чтобы сначала проверить пакеты для обновления, прежде чем на самом деле заставить обновление.
-
$ brew-cask.sh
просто выводит вывод, похожий на Homebrewbrew 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 "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 [[ "$1" == "upgrade" ]]; then
for cask in ${casks[@]}; do
current="$(brew cask info $cask | sed -n '1p' | sed -n 's/^.*: \(.*\)$/\1/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/^.*: \(.*\)$/\1/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
просто установите его (он же "Мне нужно это сейчас!" )
Он проверил my .dotfiles
repo; поэтому вы можете быстро установить его в свой ~/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/
для указанных выше инструкций.
Ответ 9
Я думаю, используя
brew cask reinstall `brew cask outdated`
сделает трюк. Это также поможет удалить предыдущую версию/приложение и будет устанавливать более новую версию.
Ответ 10
улучшив предоставленный код из deinspanjer,, я попытался подражать команде noop, как и от шоколадного (choco update --noop/choco outdated).
#!/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
Как можно видеть, я использую модульный подход, так как мой случай использования немного отличается. Я не хочу сидеть перед моим компьютером и нажимать yes/no для каждого приложения, которое я установил. Хотя нет реального способа обновления контейнеров (просто переустановите новейшую версию), я сначала сделаю brew обновление, чтобы иметь информацию о наличии доступных обновлений.
Затем я просматриваю все боксы, чтобы отобразить их информацию. Поскольку я ранее обновлял brew, теперь теперь предоставляется информация о том, что последняя версия последней версии не установлена.
Внутри моего метода обновления я фактически разбираю команду info для этой конкретной строки:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Что означает: "Дайте 3 строки выше информации, предоставленной всякий раз, когда вы читаете строку" не установлена ". Затем удалите любую строку, в которой есть ссылка, также удалите строку, в которой есть": "."
Учитывая структуру команды brew cask info, мы получаем одну строку (без информации о версии, URL-адрес приложения), которая отражает фактическое имя контейнера, с которым он также был установлен.
brew информационный выпуск cask
В моей версии эта информация теперь распечатана, поэтому можно легко увидеть, какие боксы устарели и могут быть обновлены.
В этот момент я делаю случай переключения, потому что, возможно, сейчас недостаточно времени для обновления. Это зависит от вашего прецедента. Для меня иногда я просто хочу посмотреть, что нового (ожидая новой версии, исправления), но на самом деле у вас нет времени на обновление, потому что сейчас я не хочу закрывать браузер и т.д.
Итак, если вы выбираете "да", список очищенных имен бочек присваивается функции обновления, где для каждой бочки, которая была определена как устаревшая, выдается переустановка.
Еще раз спасибо deinspanjer, пытаясь решить эту проблему для себя, я всегда забыл выпустить обновление brew заранее, чтобы на самом деле не было "не установленной" линии для фактического анализа (основы всего моего подхода).
Надеюсь, это было полезно.
Ответ 11
Я сделал такой script сам. Посмотрите на github https://github.com/pesh1983/brew_cask_upgrade. У этого есть довольно хорошее описание, но если у вас есть дополнительные вопросы, не стесняйтесь спрашивать меня. Это справедливое обновление: удалите и установите, поэтому всякая необходимая очистка будет выполняться самим "brew".
Ответ 12
получить устаревшие боксы:
brew устаревший пакет
бокс обновления:
brew cask переустановить устаревший контейнер
demo script:
$ 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 $1}')
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}"
Ответ 13
brew cask outdated | xargs brew cask reinstall --force
Ответ 14
На основании того, что я прочитал, я создал script, который создаст файл, в котором будут перечислены файлы для обновления, включая приложения, которые определены как последние. Затем вы можете изменить файл в соответствии с вашими требованиями и установить обновления, используя мой olinst script.
Для получения дополнительной информации посетите мой github.
Ответ 15
Это действительно раздражало меня, поэтому я создал этот script, чтобы обновить все приложения Brew и разрешить пользователю выбирать, какие приложения Cask обновлять. Вы также можете исключить приложения из соображений.
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
Ответ 16
Я использую
brew cask install --force `brew cask list`
Ответ 17
Проверьте устаревшие бочки:
варево бочка устарела
Обновление всех устаревших бочек:
заваривать бочку
Если вы хотите обновить конкретную бочку, просто добавьте имя бочки после обновления (например: 4k-video-downloader):
Brew Cask Обновление 4k-видео-загрузчик