如何使用brew更新应用程序列表?

时间:2017-07-15 08:47:06

标签: bash homebrew

我想创建一个脚本来强制更新过时的brew应用程序。

我尝试了类似的东西,但它不起作用:

var=$(brew cask outdated); for f in $var; do "brew upgrade $var --force"; done

我是bash的初学者,我觉得我在寻找的很容易,但我需要帮助。

2 个答案:

答案 0 :(得分:6)

您正在将brew命令与brew cask命令混合使用,但这种方式不起作用。

Homebrew CaskHomebrew的一个组件,允许管理图形应用程序。它开始是原始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 updatebrew 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身份执行时退出(这是正确的方法。)

2018更新

与此同时,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)

2020年

axiac 的反应基本完美。请注意,最新版本的 Homebrew 中禁用了 brew cask upgrade,因此您应该改用 brew upgrade --cask