Обновите все боксы, установленные через Homebrew Cask

Я использую Homebrew Cask для установки приложений на OS X. Как обновить все установленные контейнеры?

Ответ 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 просто выводит вывод, похожий на Homebrew 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 "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).

https://git.io/vgjiL

#!/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.

https://github.com/pacav69/caskroom-offline-install

Ответ 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-видео-загрузчик