有什么办法可以升级酿造桶


37

有什么办法升级所有brew cask的?像brew cask upgrade什么?

Answers:


23

Bash脚本升级软件包

灵感来自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

它能做什么

  • 更新酿造/酒桶,清理
  • 阅读酒桶清单
  • 检查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以后可以在本地运行


像魅力一样工作。不过最好先查询过期软件包的列表。调整脚本很容易做到这一点。
eduncan911

谢谢!您是否尝试过将其直接集成到Homebrew Cask中?我只是将其转换为鱼,它也对我有用。它也向我显示,在安装了当前版本之后,仍然存在一些旧版本。
帕斯卡尔

brew cask uninstall --force如果您不希望旧版本保留在那里,则需要在安装新版本之前运行。
帕斯卡

@Pascal是的,我注意到我也有很多旧版本。很快我将添加卸载命令。
阿泰斯(Atais)'16

@Atais卸载仍然对您有用吗?现在有些木桶将带有脚本版本号的空文件夹留在了我的脚本中,这使版本检查变得混乱。
Pascal


19

自制酒桶升级

我认为这是迄今为止升级木桶的最佳解决方案。
来源: https : //github.com/buo/homebrew-cask-upgrade

安装与使用

brew tap buo/cask-upgrade
brew update
brew cu

(可选)强制升级过时的应用程序,包括标记为最新的应用程序:

brew cu --all

12

就像另一个答案中的报价所言,当前无法升级所有更新的桶。

但是,答案的第二部分是错误的:brew upgrade --all无法升级木桶。

升级所有木桶的唯一方法是获取已安装木桶的列表并强制将其重新安装-包括未更改的木桶!

fish中,您可以这样:

for app in (brew cask list)
    brew cask install --force $app
end

编辑:

Atais创建了一个可行的脚本:Bash脚本以升级软件包
请支持他的答案,而不是这个答案。


1
好吧,请记住,它实际上将重新安装您的所有应用程序,而不仅仅是更新过时的:(
Atais

1
要升级木箱清单,您应该运行brew cask update然后按照先前的响应在此处仅升级当前已过时的软件包:apple.stackexchange.com/a/231020/49601
Danijel-James W

@ Danijel-JamesW我回滚了您的更改,因为它是错误的。这可能是在其他壳中完成的方法,但不是在鱼中。
Pascal

10

homebrew cask文档中

由于homebrew-cask存储库是Homebrew Tap,因此每次发出常规Homebrew命令时,都会拉下最新的Casks brew update。当前,自制酒桶无法始终检测是否已更新应用程序。您可以通过命令强制进行更新 brew cask install --force。我们正在努力改善这一点。

以下内容足以升级冲泡配方和酒桶。

brew upgrade --all 

4
这不再是真的。brew upgrade --all相当于brew upgrade现在。该命令不会升级木桶。
proski

6

这是我运行的.bash_profile中具有的完整自制许可证的内容。我“固定”几个项目,以防止每次更新都重复获取巨大的下载内容,因为它们的版本始终是“最新”的,或者不应该升级。

boop() {
  brew update && brew upgrade && brew cleanup \
    && cask-upgrade && cask-retire && brew cask cleanup \
      && brew doctor && brew cask doctor
}

__is_pinned() {
  local pinned=";pixate-studio;sketchup;skype;"
  [[ *";${1};"* != "${pinned}" ]] && return 0 || return 1
}

cask-upgrade() {
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      if [[ "${vers}" == "latest" ]]; then
        brew cask install "${name}" --force
      else
        brew cask install "${name}" 2> >(grep -v "re-install")
      fi
    fi
  done < <(brew cask list --versions)
}

cask-retire() {
  room="/opt/homebrew-cask/Caskroom"
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      for inst in $(ls "${room}/${name}"); do
        if [[ "${inst}" != "${vers}" ]]; then
          echo "Removing ${name} version ${inst}"
          rm -r "${room}/${name}/${inst}"
        fi
      done
    fi
  done < <(brew cask list --versions)
}

2

要在zsh中重新安装brew cask应用程序:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done

对于可能需要大量brew cask用户安装的用户(例如石英),这不是很好。另外,不必在重新安装每个应用程序之前先将其卸载。理想情况下,您还应该像brew cask update第一个那样运行更新。
Danijel-James W

@ Danijel-JamesW不幸的是,这是如果您不想保留旧版本。
帕斯卡


1

我建议在堆栈溢出的对应问题中使用@ eduncan911的答案。

简而言之:

  • $ brew-cask.sh只列出类似于Homebrew的输出brew update。上面的列表显示了所有已安装的软件包,绿色表示任何未决的更新。
  • $ brew-cask.shupgrade将强制升级那些软件包。

从他的仓库中安装:

$ 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


1

作为评论,这可能会更合适,但是我没有足够的声誉来留下评论,所以...

在撰写本文时, homebrew-cask它具有自己的升级系统,因此不再需要第三方脚本和工具。

列出过时的酒桶: brew cask outdated

要升级所有过时的酒桶: brew cask upgrade


0
for app in $(brew cask list); do
    cver="$(brew cask info "${app}" | head -n 1 | cut -d " " -f 2)"
    ivers=$(ls -1 "/opt/homebrew-cask/Caskroom/${app}/.metadata/" | tr '\n' ' ' | sed -e 's/ $//')
    aivers=(${ivers})
    nvers=$(echo ${#aivers[@]})
    echo "[*] Found ${app} in cask list. Latest available version is ${cver}. You have installed version(s): ${overs}"
    if [[ ${nvers} -eq 1 ]]; then
        echo "${ivers}" | grep -q "^${cver}$" && { echo "[*] Latest version already installed :) Skipping changes ..."
        continue; }
    fi
    echo "[+] Fixing from ${ivers} to ${cver} ..."
    brew cask uninstall "${app}" --force
    brew cask install "${app}"
done

这是不可读的-也需要对其功能进行解释
user151019
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.