Чи є спосіб модернізувати варення квасу


37

Чи є спосіб оновити всі brew casks? Щось схоже brew cask upgrade?

Відповіді:


23

Сценарій 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пізніше


Працював як шарм. Було б добре запитати спочатку про список застарілих пакетів. Досить просто налаштувати сценарій, щоб це зробити.
eduncan911

Дякую! Ви намагалися інтегрувати це безпосередньо в Homebrew Cask? Я просто перетворив його на рибу, і він працює і для мене. Також мені було виявлено, що деякі старі версії все ще були присутні після встановлення поточної версії.
Паскаль

brew cask uninstall --forceПеред встановленням нової версії потрібно запустити, якщо ви не хочете, щоб стара версія там залишалася.
Паскаль

@Pascal Так, я помітив, що у мене тут також багато старих версій. Незабаром я додам команду видалення.
Атаї

@Atais деінсталяція все ще стабільно працює для вас? Деякі скриньки тепер залишають порожню папку з номером версії з моїм сценарієм, яка псується при перевірці версії.
Паскаль


19

homebrew-cask-оновлення

Я думаю, що це далеко не найкраще рішення для оновлення бочок.
джерело: https://github.com/buo/homebrew-cask-upgrade

Встановлення та використання

brew tap buo/cask-upgrade
brew update
brew cu

(Необов’язково) Примушуйте оновити застарілі програми, включаючи найновіші:

brew cu --all

12

Як сказано в цитаті в іншій відповіді, наразі немає можливості оновити всі оновлені скриньки.

Друга частина відповіді помилкова, однак: brew upgrade --allне вдається оновити скриньки.

Єдиний спосіб оновити всі скриньки - це отримати список встановлених скриньок і змусити їх перевстановити - в тому числі і ті, що не змінилися!

У рибі можна зробити так, як це:

for app in (brew cask list)
    brew cask install --force $app
end

редагувати:

Atais створив сценарій, який працює: Bash script для оновлення пакетів .
Будь ласка, підкажіть його відповідь, а не цю.


1
Ну, майте на увазі, що він фактично перевстановить усі ваші програми, а не лише оновить застарілі :(
Atais

1
Щоб оновити списки каскаду, слід запустити, brew cask updateа потім дотримуйтесь попередньої відповіді, щоб оновити лише ті пакети, які наразі застаріли тут: apple.stackexchange.com/a/231020/49601
Danijel-James W

@ Danijel-JamesW Я повернув вашу зміну назад, тому що це було неправильно. Це може бути спосіб зробити це в інших мушлі, але це не в рибі.
Паскаль

10

З homebrew caskдокументації :

Оскільки сховище homebrew-cask - це Homebrew Tap, ви знімаєте найновіші Casks щоразу, коли ви видаєте звичайну команду Homebrew brew update. В даний час, домашній-cask не завжди може виявити, чи додаток було оновлено. Ви можете примусити оновлення за допомогою команди brew cask install --force. Ми працюємо над покращенням цього.

Наступного має бути достатньо для оновлення як формул, так і бочок.

brew upgrade --all 

4
Це вже не відповідає дійсності. brew upgrade --allеквівалентно brew upgradeнині. Ця команда не модернізується.
proski

6

Ось що я маю в своєму .bash_profile, який я запускаю, щоб зробити повний перехід на домашню мову. Я "пришпилюю" кілька елементів, щоб гігантські завантаження не повторювалися для кожного оновлення, оскільки їх версії завжди "найновіші" або їх не слід оновлювати.

boop() {
  brew update && brew upgrade && brew cleanup \
    && cask-upgrade && cask-retire && brew cask cleanup \
      && brew doctor && brew cask doctor
}

__is_pinned() {
  local pinned=";pixate-studio;sketchup;skype;"
  [[ *";${1};"* != "${pinned}" ]] && return 0 || return 1
}

cask-upgrade() {
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      if [[ "${vers}" == "latest" ]]; then
        brew cask install "${name}" --force
      else
        brew cask install "${name}" 2> >(grep -v "re-install")
      fi
    fi
  done < <(brew cask list --versions)
}

cask-retire() {
  room="/opt/homebrew-cask/Caskroom"
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      for inst in $(ls "${room}/${name}"); do
        if [[ "${inst}" != "${vers}" ]]; then
          echo "Removing ${name} version ${inst}"
          rm -r "${room}/${name}/${inst}"
        fi
      done
    fi
  done < <(brew cask list --versions)
}

2

Щоб перевстановити варіння додатків у файлі zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done

Це не дуже добре для користувачів, які можуть мати багато brew caskустановок, які потребують введення користувача (наприклад - кварц) . Також не потрібно видаляти кожну програму перед повторною інсталяцією. В ідеалі також слід запустити оновлення, як brew cask updateспочатку.
Danijel-James W

@ Danijel-JamesW На жаль, це якщо ви не хочете, щоб стара версія залишалася.
Паскаль


1

Я рекомендую відповідь @ eduncan911 у відповіді на питання про переповнення стека .

Коротко:

  • $ brew-cask.shпросто перераховує вихід, подібний до домашнього brew update. у наведеному вище списку показані всі встановлені пакети, зеленим кольором із зазначенням будь-яких очікуючих оновлень.
  • $ brew-cask.shupgrade змусить оновити ці пакети.

Встановити з його репо з:

$ 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

1

Такий сценарій я створив сам. Перегляньте https://github.com/pesh1983/brew_cask_upgrade github . Він має досить хороший опис, але якщо у вас є додаткові запитання, не соромтеся запитати мене. Це справедливе оновлення: видаліть та встановіть, тому будь-яке необхідне очищення виконуватиме сам «варити».


1

Це, мабуть, буде більш доречним як коментар, але мені не вистачає репутації, щоб залишити його, так що ...

З цього письма homebrew-caskє своя система оновлення, тому сторонні сценарії та інструменти більше не потрібні.

Щоб перелічити застарілі скриньки: brew cask outdated

Щоб оновити всі застарілі скриньки: brew cask upgrade


0
for app in $(brew cask list); do
    cver="$(brew cask info "${app}" | head -n 1 | cut -d " " -f 2)"
    ivers=$(ls -1 "/opt/homebrew-cask/Caskroom/${app}/.metadata/" | tr '\n' ' ' | sed -e 's/ $//')
    aivers=(${ivers})
    nvers=$(echo ${#aivers[@]})
    echo "[*] Found ${app} in cask list. Latest available version is ${cver}. You have installed version(s): ${overs}"
    if [[ ${nvers} -eq 1 ]]; then
        echo "${ivers}" | grep -q "^${cver}$" && { echo "[*] Latest version already installed :) Skipping changes ..."
        continue; }
    fi
    echo "[+] Fixing from ${ivers} to ${cver} ..."
    brew cask uninstall "${app}" --force
    brew cask install "${app}"
done

Це не читається - також потрібне пояснення того, що він робить
user151019
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.