답변:
파스칼 답변에서 영감을
#!/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 uninstall --force
이전 버전을 유지하지 않으려면 새 버전을 설치하기 전에 실행해야합니다 .
나는 이것이 통을 업그레이드하는 가장 좋은 해결책이라고 생각합니다.
출처 : https://github.com/buo/homebrew-cask-upgrade
설치 및 사용법
brew tap buo/cask-upgrade
brew update
brew cu
(선택 사항) 최신으로 표시된 앱을 포함하여 오래된 앱을 강제로 업그레이드합니다.
brew cu --all
다른 답변의 인용에서 알 수 있듯이 현재 업데이트 된 모든 통을 업그레이드 할 수있는 방법이 없습니다.
그러나 대답의 두 번째 부분은 잘못되었습니다 brew upgrade --all
. 통을 업그레이드 할 수 없습니다.
모든 통을 업그레이드하는 유일한 방법은 설치된 통의 목록을 가져 와서 변경하지 않은 통을 포함하여 강제로 다시 설치하는 것입니다!
에서 물고기 ,이 같은 것을 할 수 있습니다 :
for app in (brew cask list)
brew cask install --force $app
end
편집하다:
Atais는 작동하는 스크립트를 작성했습니다. Bash script to upgrade packages .
이것보다는 그의 대답을 찬성하십시오.
brew cask update
이전 응답을 따라 현재 최신이 아닌
로부터 homebrew cask
문서 :
homebrew-cask 저장소는 Homebrew Tap이므로 일반 Homebrew 명령을 실행할 때마다 최신 Casks를 풀다운합니다
brew update
. 현재, homebrew-cask는 응용 프로그램이 업데이트되었는지 항상 감지 할 수 없습니다. 명령을 통해 강제로 업데이트 할 수 있습니다brew cask install --force
. 우리는 이것을 개선하기 위해 노력하고 있습니다.
다음은 추출 공식과 통을 모두 업그레이드하기에 충분해야합니다.
brew upgrade --all
brew upgrade --all
과 같습니다 brew upgrade
. Casks는 해당 명령으로 업그레이드되지 않습니다.
.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)
}
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
먼저 업데이트를 실행해야합니다 .
이것은 정말로 나를 자극 시켜서 모든 Brew 앱을 업데이트하고 사용자가 업데이트 할 Cask 앱을 선택할 수 있도록이 스크립트를 만들었습니다. 앱도 고려에서 제외 할 수 있습니다.
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
Stack Overflow의 대응 질문에 @ eduncan911의 답변을 권장 합니다.
한마디로 :
brew-cask.sh
는 Homebrew 's와 유사한 출력을 나열합니다 brew update
. 위 목록에는 설치된 모든 패키지가 ✔
표시 되며 녹색 은 보류중인 업데이트를 나타냅니다.brew-cask.sh
upgrade는 해당 패키지를 강제로 업그레이드합니다.그의 저장소에서 다음을 설치하십시오.
$ 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
나는 혼자서 그런 대본을 만들었다. github https://github.com/pesh1983/brew_cask_upgrade를 참조하십시오 . 꽤 좋은 설명이 있지만 추가 질문이 있으면 언제든지 문의하십시오. 공정 업그레이드 : 제거 및 설치가 필요하므로 'brew'자체가 필요한 정리를 수행합니다.
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