我想创建一个脚本来强制更新过时的brew应用程序。
我尝试了类似的东西,但它不起作用:
var=$(brew cask outdated); for f in $var; do "brew upgrade $var --force"; done
我是bash的初学者,我觉得我在寻找的很容易,但我需要帮助。
答案 0 :(得分:6)
您正在将brew
命令与brew cask
命令混合使用,但这种方式不起作用。
Homebrew Cask是Homebrew的一个组件,允许管理图形应用程序。它开始是原始Homebrew的延伸;它现在是brew
的综合命令。 Homebrew本身仅管理命令行应用程序。
升级使用brew
(命令行程序)安装的所有过时程序非常简单:
# Tell Homebrew to update itself and its taps (repositories of programs)
$ brew update
# List the outdated programs
$ brew outdated
# Upgrade all the outdated programs and their dependencies
$ brew upgrade
brew update
和brew outdated
步骤是可选的。 brew upgrade
内部调用brew update
,如果上一次更新过去发生的时间过长。 brew outdated
仅列出过时安装的程序;如果您手动执行升级并且不想升级所有内容,这将非常有用。在这种情况下,您可以选择要升级的程序,并为要更新的每个程序运行brew upgrade <program>
。将<program>
替换为brew outdated
显示的包名称。
目前升级所有过时的图形程序并不是那么简单。这个过程与上面的过程略有不同。
第一步是运行brew update
。它更新了Homebrew代码和tap(a tap是由Homebrew管理的程序的存储库)。 Homebrew Cask提供了子命令brew cask update
,但它只是brew update
的别名。你可以使用其中任何一个; brew update
是首选,因为它更短。
第二步是运行brew cask outdated
。此命令显示由Cask管理的过时程序列表,以及已安装的版本和新版本。选项--quiet
告诉它只显示包名,没有版本。在第三步中你需要这个用于自动化。
不幸的是,目前没有brew cask upgrade
命令(它是planned但尚未实现)。 brew upgrade
不知道如何处理brew cask
安装的程序。
brew cask reinstall
代替缺失的brew cask upgrade
。与brew upgrade
不同,升级全部过期的软件包,brew cask reinstall
需要一个且只有一个软件包的名称。这需要循环遍历brew cask outdated
返回的列表。
升级使用Homebrew Cask安装的所有过时程序的简短shell脚本可能如下所示:
brew update
for i in $(brew cask outdated --quiet); do
brew cask reinstall $i
done
有些程序需要管理员权限才能安装驱动程序或其他系统组件。他们中的一些人使用图形对话框询问您的密码或各种确认。 brew cask
本身有时会在命令行中询问您的密码。
所有这些都无法自动升级过时的程序。
您可能认为使用sudo
可以规避所有这些。但是,Homebrew开发人员知道的更好,他们编写了brew
命令来显示消息并在以root身份执行时退出(这是正确的方法。)
与此同时,brew cask upgrade
命令已经实现,可以在上面的脚本中代替brew cask reinstall
使用。
它也可以不带参数工作,它会升级brew cask outdated
显示的所有空桶。它可以替换现在变为的脚本中的for
块:
# Upgrade Homebrew and the information about formulas
$ brew update
# List the outdated casks (optional)
$ brew cask outdated
# Upgrade all outdated casks
$ brew cask upgrade
有时,brew cask outdated
没有列出所有过时的垃圾桶。这是设计的。一些casks将自己标记为可自动更新,而其他一些使用关键字latest
作为其版本。 brew cask outdated
未列出这两类垃圾桶。要列出它们,必须在--greedy
的命令行中添加brew cask outdated
选项:
$ brew cask outdated --greedy
该命令在其输出中包括上述的桶。那些latest
版本的版本无法检查并且始终列出,标记为自动更新的版本会被检查并仅在它们确实过时时列出。
命令brew cask upgrade
也接受--greedy
选项(在内部使用brew cask outdated
查找要升级的软件包列表)。使用它可以确保您的系统是最新的,并且需要重新安装一些不过时的应用程序。
答案 1 :(得分:3)
axiac 的反应基本完美。请注意,最新版本的 Homebrew 中禁用了 brew cask upgrade
,因此您应该改用 brew upgrade --cask
。