我使用Homebrew Cask在OS x上安装应用程序,如何升级所有已安装的Cask ?
当前回答
可以列出已安装的桶:
brew cask list
并强制重新安装桶与:
brew cask install --force CASK_NAME
因此,将第一个命令的输出输出到第二个命令中,我们更新了所有的桶:
brew cask list | xargs brew cask install --force
其他回答
截至2017年12月使用: 酿造桶升级
[自2017年12月Homebrew为桶引入升级命令以来已弃用] 我简单地使用以下方法:
brew cask outdated | xargs brew cask reinstall
检查过时的酒桶:
酿酒桶过时了
升级所有过时的酒桶:
酿造桶升级
如果你想升级特定的桶,只需要在升级后添加桶名(例如:4k-video-downloader):
酿造桶升级4k视频下载器
这真的让我很恼火,所以我创建了这个脚本来更新所有的Brew应用程序,并允许用户选择更新哪个Cask应用程序。你也可以将应用程序排除在外。
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
现在终于有了一个官方的Homebrew Cask升级机制(参见第3396期的实现)!要使用它,只需运行以下命令:
酿造升级——酒桶
但是,这将不会更新没有版本信息的桶(version:latest)或具有内置升级机制的应用程序(auto_updates true)。要重新安装这些桶(并在升级可用时升级它们),运行带有——greedy标志的upgrade命令,如下所示:
酿造升级—酒桶—贪婪
变得过时:
酿造过时——酒桶——贪婪——冗长
改进了deinspanjer提供的代码,我尝试模仿一个noop命令,很像来自chocolatey的命令(choco update——noop / choco obsolete)。
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
可以看到,我使用的是模块化方法,因为我的用例略有不同。我不想坐在我的电脑前,对我安装的每个应用程序都输入是/否。虽然没有真正的升级桶的方法(只是重新安装最新版本),我首先做酿造更新的信息,有实际更新可用。
接下来,我循环遍历所有桶以显示它们的信息。因为我之前做了酿造更新,现在提供了一些桶的最新版本没有安装的信息。
在我的update方法中,我实际上为特定的行解析了info命令:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
这句话的意思是:“当你读到“未安装”这一行时,给出上面3行信息。然后删除任何有链接的行,也删除有“:”的行。”
考虑到brew cask info命令的结构,我们最终得到一行(没有版本信息,没有应用程序URL),它反映了它安装的桶的实际名称。
酿造桶信息输出
在我的版本中,这些信息现在被打印出来,所以人们可以很容易地看到哪些木桶过时了,并可以更新。
在这里我做了一个切换的例子,因为现在可能没有足够的时间来更新东西。这取决于您的用例。对我来说,我有时只是想看看有什么新的(等待一个新版本,一个错误修复),但实际上没有时间更新东西,因为现在我不想关闭我的浏览器等。
因此,如果有人选择“是”,则将已清理的桶名列表提供给更新函数,其中对于每个被确定为过期的桶,将发布重新安装。
再次感谢deinspanjer,当我试图为自己解决这个问题时,我总是忘记事先发布brew更新,所以没有“未安装”行来实际解析(这是我整个方法的基础)。
我希望这对你们有帮助。
推荐文章
- homebrew、macports或其他软件包安装工具的区别/用途是什么?
- (Mac) -bash: __git_ps1:命令未找到
- 如何创建Bash别名?
- Java/JDK的苹果硅芯片
- Ruby Bundle Symbol not found: _SSLv2_client_method (LoadError)
- Virtualenvs中的破引用
- 如何使用xargs复制名称中有空格和引号的文件?
- 强制DOM重绘/刷新Chrome/Mac
- RE错误:在Mac OS X上的非法字节序列
- OS X上的“date”命令没有ISO 8601的“-I”选项?
- MobileDevice。pkg不受信任,OS X更新后无法打开Xcode
- 在tmux模式中丢失vim配色方案
- 如何在macOS中安装wget ?
- brew install XXX和brew cask install XXX有什么区别
- Brew安装docker不包括docker引擎?