추출 통을 업그레이드하는 방법이 있습니까?


37

모든 업그레이드 할 수있는 방법이 brew cask있습니까? 같은 것 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에 직접 통합하려고 했습니까? 방금 생선으로 변환했는데 나에게도 효과가 있습니다. 또한 현재 버전을 설치 한 후에도 일부 이전 버전이 여전히 존재한다는 것을 알았습니다.
Pascal

brew cask uninstall --force이전 버전을 유지하지 않으려면 새 버전을 설치하기 전에 실행해야합니다 .
Pascal

@Pascal 예, 여기에 오래된 버전이 많이 있음을 알았습니다. 곧 제거 명령을 추가하겠습니다.
Atais

@Atais 설치 제거가 여전히 일관되게 작동합니까? 일부 통은 이제 스크립트와 함께 버전 번호가있는 빈 폴더를 남깁니다. 버전 확인이 엉망입니다.
파스칼


19

자가 맥주 통 업그레이드

나는 이것이 통을 업그레이드하는 가장 좋은 해결책이라고 생각합니다.
출처 : 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 to upgrade packages .
이것보다는 그의 대답을 찬성하십시오.


1
글쎄, 그것은 단지 오래된 응용 프로그램을 업데이트하지 않고 실제로 모든 앱을 다시 설치한다는 점에 유의하십시오. (
Atais

1
캐스 크 목록을 업그레이드하려면 brew cask update이전 응답을 따라 현재 최신이 아닌
Danijel-James W

@ Danijel-JamesW 잘못되어 변경 사항을 롤백했습니다. 다른 껍질에서 할 수있는 방법 일지 모르지만 물고기는 아닙니다.
Pascal

10

로부터 homebrew cask문서 :

homebrew-cask 저장소는 Homebrew Tap이므로 일반 Homebrew 명령을 실행할 때마다 최신 Casks를 풀다운합니다 brew update. 현재, homebrew-cask는 응용 프로그램이 업데이트되었는지 항상 감지 할 수 없습니다. 명령을 통해 강제로 업데이트 할 수 있습니다 brew cask install --force. 우리는 이것을 개선하기 위해 노력하고 있습니다.

다음은 추출 공식과 통을 모두 업그레이드하기에 충분해야합니다.

brew upgrade --all 

4
이것은 더 이상 사실이 아닙니다. 지금 brew upgrade --all과 같습니다 brew upgrade. Casks는 해당 명령으로 업그레이드되지 않습니다.
proski

6

.bash_profile에 homebrew의 전체 업그레이드 패스를 수행하기 위해 실행 한 내용이 있습니다. 버전이 항상 "최신"이거나 업그레이드되어서는 안되기 때문에 모든 업데이트에 대해 거대한 다운로드가 반복적으로 가져 오지 않도록하기 위해 몇 가지 항목을 "고정"합니다.

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 앱을 ​​다시 설치하려면

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 불행하게도 이전 버전을 유지하지 않으려는 경우입니다.
Pascal


1

Stack Overflow의 대응 질문에 @ eduncan911의 답변을 권장 합니다.

한마디로 :

  • $ brew-cask.sh는 Homebrew 's와 유사한 출력을 나열합니다 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

이것은 아마도 의견으로 더 적절할 것입니다. 그러나 나는 평판을 남기기에 충분한 평판이 없습니다.

이 글을 쓰는 시점 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.