Macos 升级通过自制桶安装的所有桶

Macos 升级通过自制桶安装的所有桶,macos,homebrew,homebrew-cask,Macos,Homebrew,Homebrew Cask,我过去常常在OS X上安装应用程序。如何升级所有已安装的Cask?现在终于有了一个针对自制Cask的官方升级机制(有关实现,请参阅)!要使用它,只需运行以下命令: brew升级——cask 但是,这不会更新没有版本控制信息的容器(version:latest)或具有内置升级机制的应用程序(auto\u updates true)。要重新安装这些机箱(并在升级可用时对其进行升级),请运行带有--greedy标志的升级命令,如下所示: brew升级--cask--贪婪可以列出已安装的cask,包括:

我过去常常在OS X上安装应用程序。如何升级所有已安装的Cask?

现在终于有了一个针对自制Cask的官方升级机制(有关实现,请参阅)!要使用它,只需运行以下命令:

brew升级——cask

但是,这不会更新没有版本控制信息的容器(
version:latest
)或具有内置升级机制的应用程序(
auto\u updates true
)。要重新安装这些机箱(并在升级可用时对其进行升级),请运行带有
--greedy
标志的升级命令,如下所示:


brew升级--cask--贪婪

可以列出已安装的cask,包括:

brew cask list
并强制重新安装桶,包括:

brew cask install --force CASK_NAME
因此,将第一个命令的输出传输到第二个命令,我们将更新所有容器:

brew cask list | xargs brew cask install --force

这是我为处理这个问题而编写的函数。请注意,我个人不希望它盲目地重新安装所有东西,因为我使用的一些容器需要一段时间才能安装,或者需要额外的提示

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 
} 

改进了deinspanjer提供的代码,我尝试模仿一个noop命令,很像chocolate中的命令(choco update--noop/choco-outleted

可以看出,我使用的是模块化方法,因为我的用例略有不同。我不想坐在电脑前,为我安装的每个应用程序键入是/否。虽然没有真正的方法升级casks(只需重新安装最新版本),但我首先进行brew更新,以获得实际有可用更新的信息

接下来,我在所有的桶中循环以显示它们的信息。因为我以前做过brew更新,现在提供的信息是某些cask的最新版本未安装

在我的update方法中,我实际解析了特定行的info命令:

lookup  | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d'  | cut -d ":" -f1
这句话的意思是:“每当你读到“未安装”一行时,请给出上面提供的3行信息。然后删除其中包含链接的任何一行,同时删除其中包含“:”的一行。”

考虑到brew cask info命令的结构,我们最后只得到一行(没有版本信息,没有应用程序URL),它反映了cask安装时的实际名称

在我的版本中,这些信息现在已经打印出来,这样人们就可以很容易地看到哪些桶已经过时,可以更新

在这一点上,我做了一个切换案例,因为现在可能没有足够的时间来更新东西。这取决于您的用例。对我来说,有时我只是想看看有什么新的东西(等待新版本、错误修复),但实际上没有时间更新东西,因为现在我不想关闭浏览器等等

因此,如果选择“是”,则桶的清洁名称列表将提供给更新功能,其中对于确定为过期的每个桶,将发布重新安装

再次感谢DeNasJunje,当我试图解决这个问题时,我总是忘记预先发布BREW更新,这样就没有“未安装”的行来实际解析(我的整个方法的基础)。 我希望这会有所帮助。

用于升级软件包的Bash脚本 灵感来自

它的作用

  • 更新brew/brew容器,清理
  • 阅读酒桶清单
  • 查看
    brew cask信息
    ,了解最新版本
  • 如果可用,请安装新版本(并删除所有旧版本!)
来源:

curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin
不耐烦的一行:

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升级
    将强制升级这些软件包
代码:

然后像这样使用它:

$ brew-cask.sh
$ brew-cask.sh upgrade

如果路径中没有
~/bin
,请在上述语句前面加上前缀
~/bin/

根据我所读的内容,我创建了一个脚本,该脚本将创建一个文件,其中列出要更新的文件,包括定义为最新的应用程序。然后,您可以修改该文件以满足您的需求,并使用my Olist脚本安装更新

有关更多信息,请访问我的github


这让我非常恼火,因此我创建了这个脚本来更新所有Brew应用程序,并允许用户选择要更新的Cask应用程序。你也可以不考虑应用程序

自制桶升级 我认为这是目前为止升级木桶的最佳解决方案。
资料来源:

安装和使用

brew tap buo/cask-upgrade
brew update
brew cu
(可选)强制升级过时的应用程序,包括标记为最新的应用程序:

brew cu --all
我用

我认为使用

brew cask reinstall `brew cask outdated`

我会成功的。这也将有助于删除应用程序的早期版本,并安装更新的版本。

我自己编写了这样的脚本。请看github。它有很好的描述,但如果你有任何其他问题,请随时问我。它进行公平升级:卸载和安装,因此任何必要的清理都将由“brew”自己执行。

自2017年12月起使用: brew桶升级

brew tap buo/cask-upgrade
brew update
brew cu
[自2017年12月Homebrew为cask引入升级命令以来已弃用] 我只使用以下方法:

获取过时的桶:

陈酿桶

升级容器:

重新安装过期的brew桶
brew cu --all
brew cask install --force `brew cask list`
brew cask reinstall `brew cask outdated`
brew cask outdated | xargs brew cask reinstall
$ 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 $1}')
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 $(brew list --cask)
brew upgrade --cask --greedy
brew list --cask | xargs brew upgrade
brew upgrade --cask