Обновите все бочки, установленные через Homebrew Cask
Я использую Homebrew Cask для установки приложений на OS X. Как обновить все установленные бочки?
24 ответа
Обновление за декабрь 2017
Я думал, что этого никогда не произойдет, но теперь наконец-то появился официальный механизм обновления для Homebrew Cask (см. Раздел "Выпуск 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 https://github.com/buo/homebrew-cask-upgrade, внешний пакет, который добавляет команду обновления в brew cask. Я успешно протестировал несколько пакетов.
Оригинальный ответ
Не существует официального метода обновления доморощенных бочек. Это в настоящее время работает над, но это все еще очень далеко от завершения. Смотрите Issue #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:\ \(.*\)/\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
потом
Я уже некоторое время использую Homebrew (сейчас 2022 год), и вот моя любимая однострочная команда, которую я запускаю каждый день, пока варю утренний кофе. Это отлично, если у вас есть все или большинство ваших приложений в виде бочек и они управляются Homebrew, и вы хотите получать последние обновления для новых функций и по соображениям безопасности.
Предупреждения:
- НЕ ИСПОЛЬЗУЙТЕ в рабочей среде, где ключевыми факторами являются надежность и стабильность. Хотя постоянное наличие последних обновлений безопасности звучит как хорошая идея, не стоит получать обновления сразу после их выхода.
- Если вы разработчик программного обеспечения, измените эту команду и удалите файлы . Это связано с тем, что всегда лучше проверять устаревшие версии формул/бочек перед обновлением на предмет совместимости с вашей средой разработки. Вам лучше вручную обновить определенные формулы/бочки, которые, как вы уверены, не будут мешать вашим проектам, и обычно это требует проверки примечаний к выпуску. При отдельном обновлении бочек/рецептов используйте
brew upgrade cask_name_here
.
Вот команда:
brew update && brew outdated --greedy && brew upgrade --greedy && brew cleanup
Давайте объясним, что это делает.
The
brew update
Команда используется для обновления самого Homebrew, прежде чем мы сделаем что-либо еще.
The
brew outdated --greedy
Команда используется для вывода списка всех бочек/формул, для которых доступны обновления. Параметр greedy указывает, что в этот список должны быть включены приложения, которые автоматически обновляются и помечены как version:latest.
The
brew upgrade --greedy
Команда используется для обновления всех бочек/формул, которые ранее были указаны как устаревшие. Жадный параметр указывает, что приложения, которые автоматически обновляются и помечены версией: последняя, должны быть включены в этот процесс обновления. Имейте в виду, что если вы не видите вывода в терминале после запуска этой команды, это означает, что обновлять нечего, в отличие от
brew outdated
эта команда не отправляет сообщение обратно на терминал, информирующее пользователей о том, что ничего не нужно обновлять.
The
brew cleanup
Команда удаляет старые файлы блокировки и устаревшие загрузки для всех формул и бочек, а также удаляет старые версии установленных формул. Проще говоря, старые или оставшиеся файлы от ваших предыдущих версий этих бочек/формул.
brew list --cask | xargs brew upgrade
Это циклически перебирает все приложения, установленные brew cask, и обновляет их по одному.
brew upgrade --cask
у меня больше не работает.
По состоянию на декабрь 2017 года использование: обновление бочки
[УСТАРЕЛО с декабря 2017 года, когда Homebrew ввел команду обновления для бочки]. Я просто использую следующее:
brew cask outdated | xargs brew cask reinstall
brew cask upgrade
upgrade
Команда была недавно введена в Homebrew Cask и должна отказаться от всех других ручных методов, описанных в других ответах.
Пакеты с auto_updates или version: latest не будут обновлены; проходить
--greedy
чтобы обновить их:
brew upgrade --cask --greedy
Я использую эту команду,
brew cask upgrade $(brew cask list)
и работает очень хорошо!
Вот функция, которую я написал для обработки этого. Обратите внимание, что лично я не хотел, чтобы он просто вслепую переустанавливал все, так как некоторые из бочек, которые я использую, требуют времени для установки или требуют дополнительных подсказок.
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
}
Основываясь на ответе @Atais, я усовершенствовал его логику во что-то более приятное. Мне нужен был способ проверить пакеты на предмет обновления до того, как приступить к обновлению.
$ brew-cask.sh
просто перечисляет вывод, похожий на Homebrew'sbrew 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://stackru.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
просто установите его (он же мне нужен сейчас!)
Это проверено в моем .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`
сделает свое дело. Это также поможет удалить предыдущую версию / версии приложения и установит более новую версию.
Я сделал такой скрипт сам. Пожалуйста, посмотрите на github https://github.com/pesh1983/brew_cask_upgrade. У него довольно хорошее описание, но если у вас есть дополнительные вопросы, не стесняйтесь их задавать. Обновление справедливо: удалите и установите, поэтому любая необходимая очистка будет выполняться самим brew.
for cask in $(brew list --cask); do brew upgrade --cask $cask; done;
Простой цикл FOR для перебора всех контейнеров вместо обновления вручную по одному.
Проверьте устаревшие бочки:
бочка для варки устарела
Обновление всей устаревшей бочки:
обновление бочки для пива
Если вы хотите обновить конкретный контейнер, просто добавьте имя контейнера после обновления (например, загрузчик видео 4k):
варить бочку апгрейд 4k-видео-загрузчик
Улучшая предоставленный код от deinspanjer, я попытался имитировать команду noop, очень похожую на команду из шоколада (обновление 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
Как можно видеть, я использую модульный подход, поскольку мой вариант использования немного отличается. Я не хочу сидеть перед моим компьютером и вводить да / нет для каждого установленного приложения. Хотя нет реального способа обновления бочек (просто переустановите самую новую версию), я сначала делаю brew update, чтобы получить информацию о том, что обновления действительно доступны.
Затем я перебираю все бочки, чтобы отобразить их информацию. Поскольку раньше я делал brew update, теперь одному предоставляется информация о том, что последняя версия некоторых бочек не установлена.
Внутри моего метода обновления я фактически анализирую команду info для этой конкретной строки:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Что означает: "Дайте 3 строки выше информации, предоставленной всякий раз, когда вы читаете строку" не установлена ". Затем удалите любую строку, содержащую ссылку в ней, а также удалите строку, содержащую": "в ней".
Учитывая структуру команды brew cask info, мы получаем одну строку (без информации о версии, без URL-адреса приложения), которая отражает фактическое имя контейнера, с которым оно также было установлено.
В моей версии эта информация теперь распечатана, поэтому можно легко увидеть, какие бочки устарели и могут быть обновлены.
На данный момент я делаю переключение случая, потому что, может быть, сейчас не хватает времени, чтобы обновить вещи. Это зависит от вашего варианта использования. Что касается меня, я иногда просто хочу посмотреть, что нового (ожидание новой версии, исправление ошибки), но на самом деле у меня нет времени на обновление, потому что сейчас я не хочу закрывать свой браузер и т. Д.
Поэтому, если выбрано "да", список очищенных имен контейнеров передается в функцию обновления, где для каждого контейнера, который был определен как устаревший, выдается переустановка.
Еще раз спасибо deinspanjer, пытаясь решить эту проблему для себя, я всегда забывал заранее выпускать обновление 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 $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}"
Это действительно раздражало меня, поэтому я создал этот скрипт, чтобы обновить все приложения Brew и позволить пользователю выбирать, какие приложения Cask обновлять. Вы также можете исключить приложения из рассмотрения.
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
Я работаю с рыбьей панцирем. Поэтому я использую:
brew upgrade (brew list --cask)
. Меня устраивает.
Основываясь на том, что я прочитал, я создал скрипт, который создаст файл со списком файлов, которые будут обновлены, включая приложения, которые определены как последние. Затем вы можете изменить файл в соответствии с вашими требованиями и установить обновления, используя мой скрипт olinst.
Для получения дополнительной информации посетите мой GitHub.