Обновление всех установленных контейнеров через доморощенного бочонок
Я использую Бочонок Домашнего Пива для установки приложений на OS X. Как обновить все установленные бочки?
16 ответов:
Декабрь 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 / homebrew-cask-upgrade, внешний пакет, который добавляет команду обновления для brew cask. Я успешно протестировал его на нескольких пакетах.
Оригинальный Ответ
нет никакого официального метода для модернизации доморощенных бочек. В настоящее время над этим ведется работа, но она еще очень далека от завершения. Смотрите вопрос #4678 для более подробной информации. Эта проблема также имеет некоторые примеры сценариев, которые пользователи используйте для обновления всех своих бочек. Самый простой способ обновить один бочку - запустить
brew cask install --force <cask_name>
, но просто знайте, что есть шанс, что это может вызвать проблемы с вашим приложением, так как он не будет правильно удален в первую очередь. Обычно это не проблема, хотя.вы можете обновить все установленные бочки с помощью следующей команды оболочки:
brew cask list | xargs brew cask install --force
на будущее, более подробную информацию можно найти в дублировать вопрос на github.
homebrew-cask-upgrade
Я думаю, что это, безусловно, лучшее решение для обновления бочек.
источник: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 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 cask upgrade
[устарел с декабря 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
The
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, теперь предоставляется информация о том, что последняя версия some cask не установлена.
внутри моего метода обновления я фактически анализирую команду 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 cask переустановить устаревший-cask
демо-скрипт:
$ 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