升级所有通过 Homebrew Cask 安装的 casks
Upgrade all the casks installed via Homebrew Cask
我使用 Homebrew Cask 在 OS X 上安装应用程序。如何升级所有已安装的 casks?
终于有了 Homebrew Cask 的官方升级机制(参见 Issue 3396 实现)!要使用它,只需 运行 这个命令:
brew upgrade --cask
然而,这不会更新没有版本控制信息的 casks (version :latest
) 或具有内置升级机制的应用程序 (auto_updates true
)。要重新安装这些 casks(如果有升级可用则升级它们),运行 带有 --greedy
标志的升级命令如下所示:
brew upgrade --cask --greedy
要过时:
brew outdated --cask --greedy --verbose
可以列出已安装的 casks:
brew cask list
并强制重新安装木桶:
brew cask install --force CASK_NAME
因此,将第一个命令的输出通过管道传输到第二个命令,我们更新所有的桶:
brew cask list | xargs brew cask install --force
这是我为处理此问题而编写的函数。请注意,我个人不希望它只是盲目地重新安装所有东西,因为我使用的一些木桶需要一段时间才能安装或需要额外提示。
brew_cask_upgrade() {
if [ "" != '--continue' ]; then
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
fi
for c in $(brew cask list); do
echo -e "\n\nInstalled versions of $c: "
ls /opt/homebrew-cask/Caskroom/$c
echo "Cask info for $c"
brew cask info $c
select ynx in "Yes" "No" "Exit"; do
case $ynx in
"Yes") echo "Uninstalling $c"; brew cask uninstall --force "$c"; echo "Re-installing $c"; brew cask install "$c"; break;;
"No") echo "Skipping $c"; break;;
"Exit") echo "Exiting brew_cask_upgrade"; return;;
esac
done
done
}
改进 deinspanjer 提供的代码, 我尝试模仿一个 noop 命令,很像来自 chocolatey 的命令(choco update --noop / choco过时).
#!/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
如您所见,我使用的是模块化方法,因为我的用例略有不同。我不想坐在电脑前为我安装的每个应用程序键入 yes/no。虽然没有升级 casks 的真正方法(只是重新安装最新版本),但我 首先执行 brew update 以获得实际更新可用的信息。
接下来,我循环浏览所有木桶以显示它们的信息。因为之前刷过brew update,现在提示某个cask的最新版本没有安装
在我的更新方法中,我实际上解析了特定行的信息命令:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
转换为:"Give the 3 lines above of info provided whenever you read the line "未安装”。然后删除其中包含 link 的任何行,同时删除其中包含“:”的行。“
鉴于 brew cask info 命令的结构,我们以一行结束(没有版本信息,没有应用程序 URL),它反映了 cask 的实际名称,它也被安装了。
在我的版本中,此信息现在已打印出来,因此可以轻松查看哪些 casks 已过时并可以更新。
在这一点上我做了一个切换案例,因为现在可能没有足够的时间来更新东西。这取决于您的用例。对我来说,有时我只是想看看有什么新东西(等待新版本,错误修复)但实际上没有时间更新东西,因为现在我不想关闭我的浏览器等
因此,如果选择 "yes",已清理的 casks 名称列表将提供给更新功能,其中对于确定为过时的每个 casks 都会发出重新安装。
再次感谢 deinspanjer,在尝试为自己解决这个问题时,我总是忘记事先发布 brew update,所以那里没有 "not installed" 行来实际解析(我整个方法的基础)。
希望对您有所帮助。
Bash 升级包的脚本
灵感来自 Pascal answer
#!/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:\ \(.*\)//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/brew桶,清理
- 阅读木桶清单
- 检查
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
了
根据@Atais 的回答,我将他的逻辑增强得更好。我想要一种方法来先检查要升级的包,然后再实际强制升级。
$ brew-cask.sh
仅列出类似于 Homebrew 的 brew update
. 的输出
- 上面的列表显示了所有已安装的软件包,绿色
✔
表示任何待处理的更新。
$ brew-cask.sh upgrade
将强制升级这些软件包。
代码:
# Usage:
#
# $ brew update
# You should execute this first to update everything locally.
#
# $ brew-cask.sh [update]
# This will list all of your cask packages and rather there is an upgrade
# pending with a ✔ checkmark, just like Homebrew does with "brew update".
# The update command is optional, as it doesn't actually do any tracking, there's
# not really anything to "update" with cask. But it keeps with the pattern of
# of Homebrew's "brew update" pattern for those with memory muscle fingers (like me).
#
# $ brew-cask.sh upgrade
# This performs a "brew cask install <cask> --force" of all cask packages that have
# an update pending.
#
# This code was inspired by
# get the list of installed casks
casks=( $(brew cask list) )
if [[ "" == "upgrade" ]]; then
for cask in ${casks[@]}; do
current="$(brew cask info $cask | sed -n '1p' | sed -n 's/^.*: \(.*\)$//p')"
installed=( $(ls /opt/homebrew-cask/Caskroom/$cask))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
echo "Upgrading $cask to v$current."
(set -x; brew cask install $cask --force;)
else
echo "$cask v$current is up-to-date, skipping."
fi
done
else
echo "Inspecting ${#casks[@]} casks. Use 'brew-cask.sh upgrade' to perform any updates."
for (( i = i ; i < ${#casks[@]} ; i++ )); do
current="$(brew cask info ${casks[$i]} | sed -n '1p' | sed -n 's/^.*: \(.*\)$//p')"
installed=( $(ls /opt/homebrew-cask/Caskroom/${casks[$i]}))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
casks[$i]="${casks[$i]}$(tput sgr0)$(tput setaf 2) ✔$(tput sgr0)"
fi
done
echo " ${casks[@]/%/$'\n'}" | column
fi
只需安装它(又名 "I need it now!")
签到my .dotfiles
repo;因此,您可以通过以下方式将其快速安装到您的 ~/bin
中:
$ 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
如果您的路径中没有 ~/bin
,请在上述语句前添加 ~/bin/
。
根据我所阅读的内容,我创建了一个脚本,该脚本将创建一个文件,其中列出要更新的文件,包括定义为最新的应用程序。然后您可以修改该文件以满足您的要求并使用我的 olinst 脚本安装更新。
有关详细信息,请访问我的 github。
这让我很恼火,所以我创建了这个脚本来更新所有 Brew 应用程序并允许用户选择要更新的 Cask 应用程序。您也可以将应用排除在考虑范围之外。
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
自制木桶升级
我认为这是迄今为止升级木桶的最佳解决方案。
来源: https://github.com/buo/homebrew-cask-upgrade
安装与使用
brew tap buo/cask-upgrade
brew update
brew cu
(可选)强制升级过时的应用程序,包括标记为最新的应用程序:
brew cu --all
我用
brew cask install --force `brew cask list`
我想用
brew cask reinstall `brew cask outdated`
会成功的。这也将有助于删除以前的 version/s 应用程序并安装较新的版本。
我自己做了这样的脚本。请看githubhttps://github.com/pesh1983/brew_cask_upgrade。它有很好的描述,但如果您有任何其他问题,请随时问我。它进行公平升级:卸载和安装,因此任何必要的清理都将由 'brew' 自己执行。
截至 2017 年 12 月使用:
酿造桶升级
[自 2017 年 12 月 Homebrew 引入 cask 升级命令后已弃用]
我只是使用以下内容:
brew cask outdated | xargs brew cask reinstall
获取过时的木桶:
brew cask outdated
升级桶:
brew cask reinstall outdated-cask
演示脚本:
$ cat ~/bin/brew_cask_upgrade.sh
#!/bin/bash
red=$(tput setaf 1)
# green=$(tput setaf 2)
reset=$(tput sgr0)
(set -x; brew update;)
for cask in $(brew cask outdated | awk '{print }')
do
echo "${red}update ${cask} ...${reset}."
(set -x; brew cask install --force "$cask";)
done
echo "${red}brew clean up ...${reset}"
(set -x; brew cask cleanup;)
echo "${red}brew clean up done.${reset}"
brew cask outdated | xargs brew cask reinstall --force
brew cask upgrade
最近在 Homebrew Cask 中引入了 upgrade
命令,应该弃用其他答案中描述的所有其他手动方法。
检查过时的木桶:
brew cask outdated
正在升级所有过时的 cask:
brew cask upgrade
如果你想升级特定的 cask,只需在升级后添加 cask-name(例如:4k-video-downloader):
brew cask upgrade 4k-video-downloader
升级所有未标记为“auto-upgradable”的桶
brew upgrade --cask
升级所有桶(“auto-upgradable”而不是“auto-upgradable”)
brew upgrade --cask --greedy
我和鱼一起工作shell。
所以我使用:brew upgrade (brew list --cask)
。
对我有用。
带有'auto_updates'或'version :latest'的木桶将不会升级;通过 --greedy
升级它们:
brew upgrade --cask --greedy
brew upgrade --cask $(brew list --cask)
brew list --cask | xargs brew upgrade
这会循环遍历 brew cask 安装的所有应用程序并一次升级它们。
brew upgrade --cask
不再适合我。
我已经使用 Homebrew 一段时间了(现在是 2022 年),这是我最喜欢的一行命令 运行 每天早上冲咖啡时使用一次。如果您将所有或大部分应用程序作为 casks 并由 Homebrew 管理,并且出于新功能和安全原因希望获得最新更新,那么这非常好。
警告:
- 请勿在可靠性和稳定性至关重要的工作环境中使用。虽然不断更新最新的安全更新听起来是个好主意,但一旦更新发布就立即获取更新并不是一个好主意。
- 如果您是软件开发人员,请修改此命令 并删除
brew upgrade --greedy
。这是因为在更新与您的开发环境的兼容性之前,最好先检查过时的 formulae/casks 版本。您最好手动升级您确定不会干扰您的项目的特定 formulae/casks,并且通常需要检查发行说明。单独更新casks/formulae时,使用brew upgrade cask_name_here
.
命令如下: brew update && brew outdated --greedy && brew upgrade --greedy && brew cleanup
让我们解释一下这是做什么的。
brew update
命令用于在我们执行任何其他操作之前更新 Homebrew 本身。
brew outdated --greedy
命令用于列出所有 casks/formulae 有可用更新。 greedy 参数指定自动更新自身的应用程序和带有 version:latest 标记的应用程序应包含在此列表中。
brew upgrade --greedy
命令用于更新所有以前被列为过时的casks/formulae。 greedy 参数指定自动更新自身的应用程序和带有 version:latest 标记的应用程序应包含在此更新过程中。请注意,如果您在 运行 执行此命令后在终端中没有看到任何输出,则表示没有要更新的内容,与 brew outdated
命令不同,此命令不会向终端发回消息通知用户没有什么需要更新的。
brew cleanup
命令删除所有公式和桶的旧锁定文件和过时下载,并删除已安装公式的旧版本。简而言之,这些 casks/formulae.
之前版本的旧文件或剩余文件
开发人员和工作环境的潜在解决方案
如果您想如上所述使用此解决方案并且在 Homebrew 中有关键依赖项,则有一个解决方案:
brew pin [package_name_here]
当使用上述命令更新所有包时,pin 命令将阻止 Homebrew 更新指定的包。 For more information, here is the pull request where the feature was added to Homebrew.
我使用 Homebrew Cask 在 OS X 上安装应用程序。如何升级所有已安装的 casks?
终于有了 Homebrew Cask 的官方升级机制(参见 Issue 3396 实现)!要使用它,只需 运行 这个命令:
brew upgrade --cask
然而,这不会更新没有版本控制信息的 casks (version :latest
) 或具有内置升级机制的应用程序 (auto_updates true
)。要重新安装这些 casks(如果有升级可用则升级它们),运行 带有 --greedy
标志的升级命令如下所示:
brew upgrade --cask --greedy
要过时:
brew outdated --cask --greedy --verbose
可以列出已安装的 casks:
brew cask list
并强制重新安装木桶:
brew cask install --force CASK_NAME
因此,将第一个命令的输出通过管道传输到第二个命令,我们更新所有的桶:
brew cask list | xargs brew cask install --force
这是我为处理此问题而编写的函数。请注意,我个人不希望它只是盲目地重新安装所有东西,因为我使用的一些木桶需要一段时间才能安装或需要额外提示。
brew_cask_upgrade() {
if [ "" != '--continue' ]; then
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
fi
for c in $(brew cask list); do
echo -e "\n\nInstalled versions of $c: "
ls /opt/homebrew-cask/Caskroom/$c
echo "Cask info for $c"
brew cask info $c
select ynx in "Yes" "No" "Exit"; do
case $ynx in
"Yes") echo "Uninstalling $c"; brew cask uninstall --force "$c"; echo "Re-installing $c"; brew cask install "$c"; break;;
"No") echo "Skipping $c"; break;;
"Exit") echo "Exiting brew_cask_upgrade"; return;;
esac
done
done
}
改进 deinspanjer 提供的代码, 我尝试模仿一个 noop 命令,很像来自 chocolatey 的命令(choco update --noop / choco过时).
#!/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
如您所见,我使用的是模块化方法,因为我的用例略有不同。我不想坐在电脑前为我安装的每个应用程序键入 yes/no。虽然没有升级 casks 的真正方法(只是重新安装最新版本),但我 首先执行 brew update 以获得实际更新可用的信息。
接下来,我循环浏览所有木桶以显示它们的信息。因为之前刷过brew update,现在提示某个cask的最新版本没有安装
在我的更新方法中,我实际上解析了特定行的信息命令:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
转换为:"Give the 3 lines above of info provided whenever you read the line "未安装”。然后删除其中包含 link 的任何行,同时删除其中包含“:”的行。“
鉴于 brew cask info 命令的结构,我们以一行结束(没有版本信息,没有应用程序 URL),它反映了 cask 的实际名称,它也被安装了。
在我的版本中,此信息现在已打印出来,因此可以轻松查看哪些 casks 已过时并可以更新。
在这一点上我做了一个切换案例,因为现在可能没有足够的时间来更新东西。这取决于您的用例。对我来说,有时我只是想看看有什么新东西(等待新版本,错误修复)但实际上没有时间更新东西,因为现在我不想关闭我的浏览器等
因此,如果选择 "yes",已清理的 casks 名称列表将提供给更新功能,其中对于确定为过时的每个 casks 都会发出重新安装。
再次感谢 deinspanjer,在尝试为自己解决这个问题时,我总是忘记事先发布 brew update,所以那里没有 "not installed" 行来实际解析(我整个方法的基础)。
希望对您有所帮助。
Bash 升级包的脚本
灵感来自 Pascal answer
#!/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:\ \(.*\)//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/brew桶,清理
- 阅读木桶清单
- 检查
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
了
根据@Atais 的回答,我将他的逻辑增强得更好。我想要一种方法来先检查要升级的包,然后再实际强制升级。
$ brew-cask.sh
仅列出类似于 Homebrew 的brew update
. 的输出
- 上面的列表显示了所有已安装的软件包,绿色
✔
表示任何待处理的更新。 $ brew-cask.sh upgrade
将强制升级这些软件包。
代码:
# Usage:
#
# $ brew update
# You should execute this first to update everything locally.
#
# $ brew-cask.sh [update]
# This will list all of your cask packages and rather there is an upgrade
# pending with a ✔ checkmark, just like Homebrew does with "brew update".
# The update command is optional, as it doesn't actually do any tracking, there's
# not really anything to "update" with cask. But it keeps with the pattern of
# of Homebrew's "brew update" pattern for those with memory muscle fingers (like me).
#
# $ brew-cask.sh upgrade
# This performs a "brew cask install <cask> --force" of all cask packages that have
# an update pending.
#
# This code was inspired by
# get the list of installed casks
casks=( $(brew cask list) )
if [[ "" == "upgrade" ]]; then
for cask in ${casks[@]}; do
current="$(brew cask info $cask | sed -n '1p' | sed -n 's/^.*: \(.*\)$//p')"
installed=( $(ls /opt/homebrew-cask/Caskroom/$cask))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
echo "Upgrading $cask to v$current."
(set -x; brew cask install $cask --force;)
else
echo "$cask v$current is up-to-date, skipping."
fi
done
else
echo "Inspecting ${#casks[@]} casks. Use 'brew-cask.sh upgrade' to perform any updates."
for (( i = i ; i < ${#casks[@]} ; i++ )); do
current="$(brew cask info ${casks[$i]} | sed -n '1p' | sed -n 's/^.*: \(.*\)$//p')"
installed=( $(ls /opt/homebrew-cask/Caskroom/${casks[$i]}))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
casks[$i]="${casks[$i]}$(tput sgr0)$(tput setaf 2) ✔$(tput sgr0)"
fi
done
echo " ${casks[@]/%/$'\n'}" | column
fi
只需安装它(又名 "I need it now!")
签到my .dotfiles
repo;因此,您可以通过以下方式将其快速安装到您的 ~/bin
中:
$ 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
如果您的路径中没有 ~/bin
,请在上述语句前添加 ~/bin/
。
根据我所阅读的内容,我创建了一个脚本,该脚本将创建一个文件,其中列出要更新的文件,包括定义为最新的应用程序。然后您可以修改该文件以满足您的要求并使用我的 olinst 脚本安装更新。
有关详细信息,请访问我的 github。
这让我很恼火,所以我创建了这个脚本来更新所有 Brew 应用程序并允许用户选择要更新的 Cask 应用程序。您也可以将应用排除在考虑范围之外。
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
自制木桶升级
我认为这是迄今为止升级木桶的最佳解决方案。
来源: https://github.com/buo/homebrew-cask-upgrade
安装与使用
brew tap buo/cask-upgrade
brew update
brew cu
(可选)强制升级过时的应用程序,包括标记为最新的应用程序:
brew cu --all
我用
brew cask install --force `brew cask list`
我想用
brew cask reinstall `brew cask outdated`
会成功的。这也将有助于删除以前的 version/s 应用程序并安装较新的版本。
我自己做了这样的脚本。请看githubhttps://github.com/pesh1983/brew_cask_upgrade。它有很好的描述,但如果您有任何其他问题,请随时问我。它进行公平升级:卸载和安装,因此任何必要的清理都将由 'brew' 自己执行。
截至 2017 年 12 月使用: 酿造桶升级
[自 2017 年 12 月 Homebrew 引入 cask 升级命令后已弃用]
我只是使用以下内容:
brew cask outdated | xargs brew cask reinstall
获取过时的木桶:
brew cask outdated
升级桶:
brew cask reinstall outdated-cask
演示脚本:
$ cat ~/bin/brew_cask_upgrade.sh
#!/bin/bash
red=$(tput setaf 1)
# green=$(tput setaf 2)
reset=$(tput sgr0)
(set -x; brew update;)
for cask in $(brew cask outdated | awk '{print }')
do
echo "${red}update ${cask} ...${reset}."
(set -x; brew cask install --force "$cask";)
done
echo "${red}brew clean up ...${reset}"
(set -x; brew cask cleanup;)
echo "${red}brew clean up done.${reset}"
brew cask outdated | xargs brew cask reinstall --force
brew cask upgrade
最近在 Homebrew Cask 中引入了 upgrade
命令,应该弃用其他答案中描述的所有其他手动方法。
检查过时的木桶:
brew cask outdated
正在升级所有过时的 cask:
brew cask upgrade
如果你想升级特定的 cask,只需在升级后添加 cask-name(例如:4k-video-downloader):
brew cask upgrade 4k-video-downloader
升级所有未标记为“auto-upgradable”的桶
brew upgrade --cask
升级所有桶(“auto-upgradable”而不是“auto-upgradable”)
brew upgrade --cask --greedy
我和鱼一起工作shell。
所以我使用:brew upgrade (brew list --cask)
。
对我有用。
带有'auto_updates'或'version :latest'的木桶将不会升级;通过 --greedy
升级它们:
brew upgrade --cask --greedy
brew upgrade --cask $(brew list --cask)
brew list --cask | xargs brew upgrade
这会循环遍历 brew cask 安装的所有应用程序并一次升级它们。
brew upgrade --cask
不再适合我。
我已经使用 Homebrew 一段时间了(现在是 2022 年),这是我最喜欢的一行命令 运行 每天早上冲咖啡时使用一次。如果您将所有或大部分应用程序作为 casks 并由 Homebrew 管理,并且出于新功能和安全原因希望获得最新更新,那么这非常好。
警告:
- 请勿在可靠性和稳定性至关重要的工作环境中使用。虽然不断更新最新的安全更新听起来是个好主意,但一旦更新发布就立即获取更新并不是一个好主意。
- 如果您是软件开发人员,请修改此命令 并删除
brew upgrade --greedy
。这是因为在更新与您的开发环境的兼容性之前,最好先检查过时的 formulae/casks 版本。您最好手动升级您确定不会干扰您的项目的特定 formulae/casks,并且通常需要检查发行说明。单独更新casks/formulae时,使用brew upgrade cask_name_here
.
命令如下: brew update && brew outdated --greedy && brew upgrade --greedy && brew cleanup
让我们解释一下这是做什么的。
brew update
命令用于在我们执行任何其他操作之前更新 Homebrew 本身。
brew outdated --greedy
命令用于列出所有 casks/formulae 有可用更新。 greedy 参数指定自动更新自身的应用程序和带有 version:latest 标记的应用程序应包含在此列表中。
brew upgrade --greedy
命令用于更新所有以前被列为过时的casks/formulae。 greedy 参数指定自动更新自身的应用程序和带有 version:latest 标记的应用程序应包含在此更新过程中。请注意,如果您在 运行 执行此命令后在终端中没有看到任何输出,则表示没有要更新的内容,与 brew outdated
命令不同,此命令不会向终端发回消息通知用户没有什么需要更新的。
brew cleanup
命令删除所有公式和桶的旧锁定文件和过时下载,并删除已安装公式的旧版本。简而言之,这些 casks/formulae.
开发人员和工作环境的潜在解决方案 如果您想如上所述使用此解决方案并且在 Homebrew 中有关键依赖项,则有一个解决方案:
brew pin [package_name_here]
当使用上述命令更新所有包时,pin 命令将阻止 Homebrew 更新指定的包。 For more information, here is the pull request where the feature was added to Homebrew.