enr*_*cis 134 macos homebrew homebrew-cask
我使用Homebrew Cask在OS X上安装应用程序.如何升级所有已安装的存储桶?
scr*_*iac 246
2017年12月更新
我认为它永远不会发生,但现在终于有一个Homebrew Cask的官方升级机制(参见问题3396的实现)!要使用它,只需运行以下命令:
brew cask upgrade
但是,这不会更新没有版本控制信息的存储桶(version :latest)或具有内置升级机制的应用程序(auto_updates true).要重新安装这些磁盘(并在升级可用时升级它们),请运行带有以下--greedy标志的upgrade命令:
brew cask upgrade --greedy
2017年3月更新(介意双关语;)(@ polo)
我找到了一些更新,因为这是最初的答案.要获得解决方法,您现在可以使用brew cask upgrade:
__PRE__
问题原始答案中提到的问题4678已关闭,现在在问题#29301中讨论了升级功能. 还有buo/homebrew- cask -upgrade,这是一个向brew cask添加升级命令的外部包.我已成功测试了几个包.
原始答案
没有官方方法来升级自制垃圾桶.目前正在开展这项工作,但距离完成还有很长的路要走.有关详细信息,请参阅问题#4678.该问题还有一些用户用来升级所有漏洞的脚本示例.升级单个桶的最简单方法是运行version :latest,但只知道这可能会导致您的应用程序出现问题,因为它将无法首先正确卸载.通常这不是问题.
您可以使用以下shell命令升级所有已安装的存储桶:
__PRE__
为了将来参考,可以在github上的重复问题中找到更多详细信息.
Ata*_*ais 44
我认为这是升级桶的最佳解决方案.
来源: https ://github.com/buo/homebrew-cask-upgrade
安装和使用
brew tap buo/cask-upgrade
brew update
brew cu
Run Code Online (Sandbox Code Playgroud)
(可选)强制升级过时的应用程序,包括标记为最新的应用程序:
brew cu --all
Run Code Online (Sandbox Code Playgroud)
enr*_*cis 26
可以列出已安装的桶:
brew cask list
Run Code Online (Sandbox Code Playgroud)
并强制重新安装一个木桶:
brew cask install --force CASK_NAME
Run Code Online (Sandbox Code Playgroud)
因此,将第一个命令的输出连接到第二个命令,我们更新所有的桶:
brew cask list | xargs brew cask install --force
Run Code Online (Sandbox Code Playgroud)
Ata*_*ais 19
受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
Run Code Online (Sandbox Code Playgroud)
它能做什么
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
Run Code Online (Sandbox Code Playgroud)
另存为 /usr/local/bin/cask-upgrade,因此您可以在本地运行cask-upgrade后
Nic*_*ist 14
我已经使用 Homebrew 一段时间了(现在是 2022 年),这是我最喜欢的一行命令,每天在我早上煮咖啡时运行一次。如果您将全部或大部分应用程序作为桶并由 Homebrew 管理,并且您希望获得新功能和安全原因的最新更新,那么这是非常好的。
警告:
brew upgrade --greedy. 这是因为在更新之前检查过时的公式/桶版本总是更好,以确保与您的开发环境的兼容性。您最好手动升级您确定不会干扰您的项目的特定配方/桶,并且通常需要检查发行说明。单独更新木桶/配方时,请使用brew upgrade cask_name_here.这是命令: brew update && brew outdated --greedy && brew upgrade --greedy && brew cleanup
让我们解释一下这是做什么的。
在我们执行其他操作之前,该brew update命令用于更新 Homebrew 本身。
该brew outdated --greedy命令用于列出所有有可用更新的桶/配方。贪婪参数指定自动更新自身的应用程序以及带有 version:latest 标记的应用程序应包含在此列表中。
该brew upgrade --greedy命令用于更新之前列为过时的所有桶/配方。贪婪参数指定自动更新自身的应用程序以及带有 version:latest 标记的应用程序应包含在此更新过程中。请注意,如果运行此命令后在终端中没有看到任何输出,则意味着没有任何内容需要更新,与该命令不同,此brew outdated命令不会向终端发送消息,通知用户没有任何内容需要更新。
该brew cleanup命令删除所有公式和桶的旧锁定文件和过时的下载,并删除已安装公式的旧版本。简而言之,这些木桶/配方的先前版本中的旧文件或剩余文件。
开发人员和工作环境的潜在解决方案 如果您想使用上述解决方案并且在 Homebrew 中具有关键依赖项,那么有一个解决方案:
brew pin [package_name_here]
Run Code Online (Sandbox Code Playgroud)
当使用上述命令更新所有包时,pin 命令将阻止 Homebrew 更新指定的包。有关更多信息,请参阅以下拉取请求,其中该功能已添加到 Homebrew 中。
小智 12
brew list --cask | xargs brew upgrade
Run Code Online (Sandbox Code Playgroud)
这会循环显示brew cask安装的所有应用程序,并一次升级一个。
brew upgrade --cask
Run Code Online (Sandbox Code Playgroud)
不再适合我。
Boj*_*oer 11
截至2017年12月使用: brew cask升级
[自2017年12月Homebrew引入cask升级命令以来已弃用]
我只使用以下内容:
brew cask outdated | xargs brew cask reinstall
Run Code Online (Sandbox Code Playgroud)
小智 9
具有“auto_updates”或“version:latest”的木桶将不会升级;通过--greedy升级它们:
brew upgrade --cask --greedy
Run Code Online (Sandbox Code Playgroud)
这是我为处理这个而编写的函数.请注意,我个人不希望它只是盲目地重新安装所有内容,因为我使用的一些桶需要一段时间才能安装或需要额外的提示.
brew-cask-upgrade() {
if [ "$1" != '--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
}
Run Code Online (Sandbox Code Playgroud)
升级所有未标记为“自动升级”的木桶
brew upgrade --cask
Run Code Online (Sandbox Code Playgroud)
升级所有木桶(“可自动升级”而不是“可自动升级”)
brew upgrade --cask --greedy
Run Code Online (Sandbox Code Playgroud)
根据@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 http://stackoverflow.com/a/36000907/56693
# get the list of installed casks
casks=( $(brew cask list) )
if [[ "$1" == "upgrade" ]]; then
for cask in ${casks[@]}; do
current="$(brew cask info $cask | sed -n '1p' | sed -n 's/^.*: \(.*\)$/\1/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/^.*: \(.*\)$/\1/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
Run Code Online (Sandbox Code Playgroud)
它已检查到我的.dotfilesrepo 中;因此,您可以通过以下方式快速安装它~/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
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
$ brew-cask.sh
$ brew-cask.sh upgrade
Run Code Online (Sandbox Code Playgroud)
如果您~/bin的路径中没有,请添加~/bin/上述语句的前缀。
| 归档时间: |
|
| 查看次数: |
47137 次 |
| 最近记录: |