Answers:
灵感来自Pascal答案
#!/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
无法升级木桶。
升级所有木桶的唯一方法是获取已安装木桶的列表并强制将其重新安装-包括未更改的木桶!
在fish中,您可以这样:
for app in (brew cask list)
brew cask install --force $app
end
编辑:
Atais创建了一个可行的脚本:Bash脚本以升级软件包。
请支持他的答案,而不是这个答案。
brew cask update
然后按照先前的响应在此处仅升级当前已过时的软件包:apple.stackexchange.com/a/231020/49601
由于homebrew-cask存储库是Homebrew Tap,因此每次发出常规Homebrew命令时,都会拉下最新的Casks
brew update
。当前,自制酒桶无法始终检测是否已更新应用程序。您可以通过命令强制进行更新brew cask install --force
。我们正在努力改善这一点。
以下内容足以升级冲泡配方和酒桶。
brew upgrade --all
brew upgrade --all
相当于brew upgrade
现在。该命令不会升级木桶。
这是我运行的.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)
}
要在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
我建议在堆栈溢出的对应问题中使用@ eduncan911的答案。
简而言之:
brew-cask.sh
只列出类似于Homebrew的输出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