Homebrew Cask를 통해 설치된 모든 통을 업그레이드하십시오.


157

내가 사용 브루 술통 ' 나는 모든 설치된 통을 업그레이드하려면 OS X의 방법에 응용 프로그램을 설치?


3
추가 된 질문 : "어떻게 통 하나를 업그레이드 할 수 있습니까?"
Matthew Harwood

나는 그것에 매우 관심이있을 것입니다 ... 통을 업그레이드하는 방법이없는 것 같지만 의미가 없습니다. Brackets 1.3이 설치되어 있고 대괄호 안에 플러그인이 설치되어 있습니다. 1.4 버전이 나오기 때문에 업그레이드하고 싶지만 플러그인은 유지하십시오. 어떻게해야할지 모르겠습니다.
Jean-François Beauchef

특히 브라켓과 관련하여 OS X for Brackets의 사용자 확장은에 저장 ~/Library/Application Support/Brackets/extensions/user되며 업그레이드시에도 유지됩니다. 시스템 플러그인은에 앱 번들 내에 실제로 저장되며 앱 번들 Brackets.app/extensions/default을 교체하면 손실되지만 가장 쉬운 방법은 플러그인을 이전 번들에서 새 번들로 복사하는 것입니다.
Caleb Xu

참고 : 구현brew cask upgrade 마스터 : 브루에 15 개 커밋 병합
리터 --marc 리터

내가 단일 통을 업그레이드하는 유일한 방법은 brew cask uninstall my-cool-cask그때 brew cask install my-cool-cask입니다.
애런 그레이

답변:


292

이제 Homebrew Cask의 공식 업그레이드 메커니즘이 완성 되었습니다 (구현 은 이슈 3396 참조 )! 사용하려면 다음 명령을 실행하십시오.

brew cask upgrade

그러나 버전 정보가없는 캐스 크 ( version :latest) 또는 내장 된 업그레이드 메커니즘이있는 응용 프로그램 ( ) 은 업데이트하지 않습니다 auto_updates true. 이러한 통을 다시 설치하고 업그레이드가 가능한 경우 업그레이드하려면 다음과 같이 --greedy플래그를 사용 하여 upgrade 명령을 실행하십시오 .

brew cask upgrade --greedy


3
인용하거나지지하지 않고 아래 답변을 아래 답변에 복사 해 주신 @mipadi에게 감사드립니다. 어쨌든 이건 완전 해 보입니다.
enrico.bacis

3
@ enrico.bacis : 오한. 나는 당신의 대답을 보지 못했고 이것은 명백한 추가 사항입니다. (그리고 기록을 위해, 당신은 새로운 하나를 추가하는 대신이 답변을 편집 한 것이다.)
mipadi

2
이것은 실제로 나를 자극하여 모든 Brew 앱을 업데이트하고 사용자가 업데이트 할 Cask 앱을 ​​선택할 수 있도록이 스크립트를 만들었습니다. 앱도 고려에서 제외 할 수 있습니다. github.com/derrekyoung/ScriptsAndUtils/blob/master/...
데릭

14
이제 brew cask outdated | xargs brew cask reinstall오래된 캐스 크 만 다시 설치 하는 데 사용할 수 있습니다 .
phdoerfler

2
brew cask outdated"자동 업데이트"가 활성화되지 않은 앱 이름 만 인쇄 한다는 점에 유의 해야합니다. 오래된 모든 앱을 업그레이드하려면brew cask outdated --greedy --verbose | grep -v '(latest)' | awk '{print $1}' | xargs brew cask reinstall
jmk

48

자가 맥주 통 업그레이드

나는 이것이 통을 업그레이드하는 가장 좋은 해결책이라고 생각합니다.
출처 : https://github.com/buo/homebrew-cask-upgrade

설치 및 사용법

brew tap buo/cask-upgrade
brew update
brew cu

(선택 사항) 최신으로 표시된 앱을 포함하여 오래된 앱을 강제로 업그레이드합니다.

brew cu --all

@XingangHuang yes
ovnia 16:27에

26

설치된 통을 다음과 같이 나열 할 수 있습니다.

brew cask list

그리고 다음을 사용하여 통을 다시 설치하십시오.

brew cask install --force CASK_NAME

따라서 첫 번째 명령의 출력을 두 번째 명령으로 파이핑하여 모든 통을 업데이트합니다.

brew cask list | xargs brew cask install --force

1
그것은 실제로 통을 업데이트하지 않습니다. 사용 가능한 업데이트가없는 캐스 크에서도 강제로 다시 설치합니다. 설치 한 통 수와 설치 시간에 따라 불필요한 다운로드가 발생하고 시간이 많이 걸리며 sudo 액세스를 요구할 수 있습니다.
Burhan Ali

20

패키지를 업그레이드하기위한 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


그냥 할 수 없어 brew cask info $cask | grep "Not installed"?
Det

@Det hah ... 글쎄, 그것을 보지 못했지만 지금은 알 수 있습니다. 글쎄, 나는 다음 버전에서 그것을 할 수 있습니다 ;-)
Atais

1
$ brew cask info $cask | grep "Not installed"오류를 제공Error: This command requires a Cask token
eduncan911

1
@ eduncan911for cask in ${casks[@]}; do
Det

smacks head명백하게! 내가 그것을 잡지 못했다고 믿을 수 없다.
eduncan911

11

2017 년 12 월 현재 사용 : 맥주 통 업그레이드

[Homebrew가 cask에 대한 업그레이드 명령을 도입 한 2017 년 12 월 이후로 더 이상 사용되지 않음] 간단히 다음을 사용합니다.

brew cask outdated | xargs brew cask reinstall


기본적으로 내가하는 일을 제외하고 awk '{print $1}'는 둘 사이를 연결하는 것을 제외하고 .
폴 넬슨 베이커

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 
} 

OS X El Capitan을 실행하고 있지만이 함수를 테스트 할 때 -는 함수 이름에 허용되는 문자가 아니기 때문에 쉘에서 오류가 발생했습니다 . 중요한 차이점-bash에서는 작동하지만 sh에는 허용되지 않으므로 여러 쉘이있는 시스템 간의 호환성을 위해 #! / bin / sh를 사용하면 작동하지 않습니다. 그러나 하이픈을 밑줄로 변경하면 정상적으로 작동합니다.
Bryan 'BJ'Hoffpauir Jr.

5

@Atais의 답변을 바탕으로 그의 논리를 더 멋진 것으로 향상 시켰습니다. 실제로 업그레이드를 강제하기 전에 패키지를 먼저 업그레이드했는지 검사하는 방법이 필요했습니다.

  • $ brew-cask.shHomebrew 's와 유사한 출력 만 나열합니다 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 [[ "$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/에없는 경우 위의 진술 접두사 .


5

brew cask upgrade

upgrade명령은 최근 Homebrew Cask에 도입되었으며 다른 답변에 설명 된 다른 모든 수동 방법을 사용하지 않아야합니다.


이 명령이 존재하지만 실제로는 여러 패키지를 업그레이드하지 않습니다.
Acumenus

4

내가 사용하는 것 같아

brew cask reinstall `brew cask outdated`

트릭을 할 것입니다. 또한 응용 프로그램의 이전 버전을 제거하고 최신 버전을 설치하는 데 도움이됩니다.


2
이것은 이제brew cask reinstall `brew cask outdated`
gbonetti

1
@gbonetti 업데이트에 감사드립니다. 당신이 올바른지. 새로운 "오래된"옵션을 사용하면 작업이 더 쉽고 빨라집니다 :-).
Pranab Agarwal 2016 년

2

deinspanjer 에서 제공된 코드를 개선하면서 chocolatey ( choco 업데이트-noop / choco old) 와 비슷한 noop 명령을 모방하려고했습니다 .

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를 입력하고 싶지 않습니다. 캐스 크를 업그레이드하는 실제 방법은 없지만 (최신 버전을 다시 설치하면 됨) 먼저 실제로 업데이트가 가능하다는 정보를 얻기 위해 업데이트를 수행합니다 .

그런 다음 모든 통을 순환하여 정보를 표시합니다. 이전에 업데이트를했기 때문에 일부 통의 최신 버전이 설치되지 않았다는 정보가 제공됩니다.

내 업데이트 방법 내에서 실제로 해당 특정 행에 대한 info 명령을 구문 분석합니다.

lookup  | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d'  | cut -d ":" -f1

"설치되지 않은"행을 읽을 때마다 제공된 정보의 3 줄을 제공하십시오. 그런 다음 링크가있는 행을 삭제하고 ':'가있는 행도 삭제하십시오. "

brew cask info 명령의 구조를 감안할 때, 한 줄 (버전 정보 없음, 앱 URL 없음)로 끝나는데, 이는 설치된 cask의 실제 이름을 반영합니다.

맥주 통 정보 출력

내 버전에서는이 정보가 인쇄되어 캐스 크가 오래되어 업데이트 할 수있는 것을 쉽게 볼 수 있습니다.

이 시점에서 나는 현재 상황을 업데이트하기에 시간이 충분하지 않기 때문에 스위치 케이스를 사용합니다. 사용 사례에 따라 다릅니다. 나를 위해 때로는 새로운 기능 (새 버전, 버그 수정 대기 중)을보고 싶지만 실제로 브라우저를 닫고 싶지 않기 때문에 실제로 업데이트 할 시간이 없습니다.

따라서 "yes"를 선택하면 업데이트 된 캐스 크 이름 목록이 업데이트 기능에 제공됩니다. 여기서 각 캐스 크가 오래된 것으로 판단되어 재설치가 실행됩니다.

deinspanjer에게 다시 한 번 감사드립니다. 나 자신을 위해이 문제를 해결하려고 노력하면서 항상 미리 업데이트를 발행하는 것을 잊어 버렸습니다. 따라서 실제로 구문 분석 할 "설치되지 않은"행이 없었습니다 (내 전체 접근 방식의 기초).

도움이 되었기를 바랍니다.




2

구식 통을 얻으십시오 :

맥주 통 구식

업그레이드 통 :

양조 통 구식 통 다시 설치

데모 스크립트 :

$ 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}"

1

내가 읽은 것을 기반으로 최신으로 정의 된 앱을 포함하여 업데이트 할 파일을 나열하는 파일을 만드는 스크립트를 만들었습니다. 그런 다음 요구 사항에 맞게 파일을 수정하고 내 olinst 스크립트를 사용하여 업데이트를 설치할 수 있습니다.

자세한 내용은 내 github을 방문하십시오.

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



1

나는 사용한다

brew cask install --force `brew cask list`

1

오래된 통을 확인하십시오.

맥주 통 구식

모든 오래된 캐스 크 업그레이드

양조 통 업그레이드

업그레이드 특정 캐스 크를 원한다면, 업그레이드 후 캐스 크 이름을 추가하기 만하면됩니다 (예 : 4k- 비디오 다운로더).

양조 통 업그레이드 4k 비디오 다운로더


2
안녕하세요, StackOverflow에 오신 것을 환영합니다. 이 질문은 여러 개의 답변이 포함 된 오래된 질문이므로 그 중 하나가 매우 인기 있고 승인 된 답변이므로 질문에 대한 답변 방법과 기존 답변보다 선호되는 이유에 대해 자세히 설명하도록 답변을 편집하십시오. 감사.
MandyShaw 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.