web-dev-qa-db-ja.com

Homebrew Cask経由でインストールされたすべての樽をアップグレードする

Homebrew Cask を使用して、OS Xにアプリケーションをインストールします。インストールされているすべてのキャスクをアップグレードするにはどうすればよいですか?

124
enrico.bacis

2017年12月の更新

私はそれは決して起こらないと思っていましたが、ついにHomebrew Caskの公式のアップグレードメカニズムがあります(実装については Issue 3396 を参照)!使用するには、次のコマンドを実行するだけです:

brew cask upgrade

ただし、バージョン情報を持たない樽(version :latest)やアップグレードメカニズムが組み込まれているアプリケーション(auto_updates true)は更新されません。これらのキャスクを再インストール(およびアップグレードが利用可能な場合は結果的にアップグレード)するには、次のように--greedyフラグを指定してアップグレードコマンドを実行します。

brew cask upgrade --greedy

2017年3月の更新(しゃれを気にする;)(@polo)

これが最初に回答されたので、私はいくつかの更新を見つけました。回避策として、brew cask reinstallを使用できるようになりました。

brew cask reinstall <cask_name>
brew cask list | xargs brew cask reinstall

元の回答で言及された問題4678はクローズされ、アップグレード機能は 問題#29301 で説明されています buo/homebrew-cask-upgrade も追加されますcaskを作成するコマンドをアップグレードします。いくつかのパッケージで正常にテストしました。

元の回答

自家製の樽をアップグレードする公式の方法はありません。これは現在作業中ですが、まだ完成にはほど遠いです。詳細については Issue#4678 を参照してください。その問題には、ユーザーがすべての樽をアップグレードするために使用するスクリプトの例もいくつかあります。単一の樽をアップグレードする最も簡単な方法はbrew cask install --force <cask_name>を実行することですが、最初に適切にアンインストールされないため、アプリで問題が発生する可能性があることを知ってください。通常、それは問題ではありません。

次のシェルコマンドを使用して、インストールされているすべてのキャスクをアップグレードできます。

brew cask list | xargs brew cask install --force

将来の参考のために、詳細は githubでの重複した問題 にあります。

222
scribblemaniac

homebrew-cask-upgrade

これは、樽をアップグレードするための断然最良の解決策だと思います。
source:https://github.com/buo/homebrew-cask-upgrade

インストールと使用法

brew tap buo/cask-upgrade
brew update
brew cu

(オプション)最新としてマークされたものを含む古いアプリを強制的にアップグレードします。

brew cu --all
42
Atais

以下を使用して、インストールされたキャスクをリストすることができます。

brew cask list

そして、次のコマンドで樽の再インストールを強制します。

brew cask install --force CASK_NAME

したがって、最初のコマンドの出力を2番目のコマンドにパイプして、すべてのキャスクを更新します。

brew cask list | xargs brew cask install --force
26
enrico.bacis

パッケージをアップグレードするための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:\ \(.*\)/\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/brew caskの更新、クリーンアップ
  • 樽のリストを読む
  • 最新バージョンについてはbrew cask infoを確認してください
  • 利用可能な場合、新しいバージョンをインストールします(すべての古いバージョンを削除します!)

source:https://Gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b

せっかちな人のためのライナー:

curl -s https://Gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin

save as/usr/local/bin/cask-upgradeなので、後でcask-upgradeとしてローカルで実行できます

19
Atais

2017年12月現在、次を使用します:brew cask upgrade

[Homebrewがcaskのアップグレードコマンドを導入した2017年12月以降廃止されました]私は単に次を使用します。

brew cask outdated | xargs brew cask reinstall
11
Bojoer

これを処理するために作成した関数を次に示します。使用している樽の一部はインストールに時間がかかるか、追加のプロンプトが必要になるため、個人的にすべてを盲目的に再インストールすることは望ましくありません。

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 
} 
6
deinspanjer

brew cask upgrade

upgradeコマンドは最近Homebrew Caskで導入され、他の回答で説明されている他のすべての手動メソッドを廃止する必要があります。

5
enrico.bacis

私は使用すると思います

brew cask reinstall `brew cask outdated`

トリックを行います。これにより、アプリケーションの以前のバージョンが削除され、新しいバージョンがインストールされます。

4
Pranab Agarwal

@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

インストールするだけです(別名「今すぐ必要です!」)

my .dotfiles repo ;にチェックインされていますそのため、~/binwithにすばやくインストールできます。

$ 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/を付けてください。

4
eduncan911

deinspanjer、から提供されたコードを改善しました。chocolatey(のようなnoopコマンドを模倣しようとしました。 choco update --noop/choco old()。

https://git.io/vgjiL

#!/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を入力したくない。キャスクをアップグレードする実際の方法はありませんが(最新バージョンを再インストールするだけです)、私は最初にbrew updateを実行して、実際に利用可能な更新があることを示す情報を取得します

次に、情報を表示するためにすべての樽を循環します。以前にアップデートを作成したため、現在、一部のキャスクの最新バージョンがインストールされていないという情報が提供されています。

更新メソッド内で、実際にその特定の行のinfoコマンドを解析します。

lookup  | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d'  | cut -d ":" -f1

これは、「「インストールされていない」行を読むたびに提供される情報の上の3行を提供します。その後、リンクが含まれる行を削除し、「:」が含まれる行も削除します。」

Brew cask infoコマンドの構造を考えると、最終的に1行(バージョン情報なし、アプリURLなし)になります。これは、インストールされた樽の実際の名前を反映しています。

醸造キャスク情報出力

私のバージョンでは、この情報が印刷されるようになったため、どのキャスクが古く、更新できるかを簡単に確認できます。

たぶん今は物事を更新するのに十分な時間ではないからです。それはユースケースに依存します。私にとっては、時々新しいものを見たいだけです(新しいバージョンを待つ、バグ修正)、しかし今はブラウザなどを閉じたくないので、実際に更新する時間はありません。

したがって、「はい」を選択すると、クリーンアップされたキャスクの名前のリストが更新機能に渡され、古くなったと判断されたキャスクごとに再インストールが発行されます。

再びdeinspanjerに感謝します。この問題を自分で解決しようとしていたとき、事前にbrew updateを発行するのを忘れていたため、実際に解析する「インストールされていない」行はありませんでした(アプローチ全体の基礎)。

これがお役に立てば幸いです。

2
Kevin N
brew cask outdated | xargs brew cask reinstall --force
2
Omar Albeik

私は自分でそのような台本を作りました。 github https://github.com/pesh1983/brew_cask_upgrade をご覧ください。説明はかなり充実していますが、さらに質問がある場合は、お気軽にお問い合わせください。それは公平なアップグレードを行います:アンインストールとインストール。したがって、必要なクリーンアップは「brew」自体によって実行されます。

2
Pavel Goltsev

古くなった樽を入手:

醸造樽

アップグレードキャスク:

醸造キャスクは古いキャスクを再インストールします

デモスクリプト:

$ 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}"
2
Wanming Zhang

これは本当に私をいらいらさせたので、このスクリプトを作成してすべてのBrewアプリを更新し、ユーザーが更新するCaskアプリを選択できるようにしました。アプリを考慮から除外することもできます。

https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh

1
Derrek

私が使う

brew cask install --force `brew cask list`
1
goksel

私が読んだものに基づいて、最新として定義されているアプリを含む更新されるファイルをリストするファイルを作成するスクリプトを作成しました。その後、要件に合わせてファイルを変更し、olinstスクリプトを使用して更新をインストールできます。

詳細については、私のgithubをご覧ください。

https://github.com/pacav69/caskroom-offline-install

1
Paul Cav

古くなった樽を確認する:

醸造樽

すべての古い樽のアップグレード:

醸造キャスクのアップグレード

特定の樽をアップグレードする場合は、アップグレード後に樽名を追加するだけです(例:4k-video-downloader):

brew cask upgrade 4k-video-downloader

0
Amir Marmul