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

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



답변

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

brew cask upgrade

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

brew cask upgrade --greedy


답변

자가 맥주 통 업그레이드

나는 이것이 통을 업그레이드하는 가장 좋은 해결책이라고 생각합니다.
출처 : 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:\ \(.*\)/\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


답변

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

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

brew cask outdated | xargs brew cask reinstall


답변

이것을 처리하기 위해 작성한 함수는 다음과 같습니다. 개인적으로 설치하는 데 약간의 시간이 걸리거나 추가 메시지가 필요하기 때문에 모든 것을 맹목적으로 다시 설치하기를 원하지 않았습니다.

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
}


답변

@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/에없는 경우 위의 진술 접두사 .