Homebrew Caskを介してインストールされたすべてのキャスクをアップグレードします


159

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


3
補足質問:「キャスクの1つをアップグレードするにはどうすればよいですか?」
Matthew Harwood

私はそれに非常に興味があります...キャスクをアップグレードする方法はないようですが、それは意味がありません。Brackets 1.3をインストールし、ブラケット内にプラグインをインストールしました。1.4が出ましたので、アップグレードしたいのですが、プラグインはそのままにしておきます。どうすればいいのかわかりません。
ジャン=フランソワ・Beauchef

特にブラケットについては、OS Xのブラケット用ユーザー拡張機能はに保存されて~/Library/Application Support/Brackets/extensions/userおり、これらはアップグレード後も保持されます。システムプラグインは確かにのApp Bundle内に保存されており、App Bundle Brackets.app/extensions/defaultを置き換えると失われますが、最も簡単な方法は、古いバンドルから新しいバンドルにプラグインをコピーすることです。
Caleb Xu

FYI:実装brew cask upgradeされた15のコミットをHomebrew:masterに実装します
l --marc l 2017

単一のキャスクをアップグレードするために私が見つけた唯一の方法は、brew cask uninstall my-cool-caskそのときbrew cask install my-cool-caskです。
アーロングレイ

回答:


295

Homebrew Caskの正式なアップグレードメカニズムがついに登場しました(実装については、問題3396を参照してください)。これを使用するには、次のコマンドを実行します。

brew cask upgrade

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

brew cask upgrade --greedy


3
以下の私の回答を引用や賛同することなくこの回答にコピーしてくれて、@ mipadiに感謝します。とにかく今これは完全なようです。
enrico.bacis 2015

3
@ enrico.bacis:チル。私はあなたの答えを見ませんでした、そしてこれは明白な追加です。(そして、記録のために、あなたは新しいものを加える代わりにあなたはこの答えを編集するべき
でした

2
これは私をいらいらさせたので、このスクリプトを作成して、すべてのBrewアプリを更新し、ユーザーが更新するCaskアプリを選択できるようにしました。アプリを検討対象から除外することもできます。 github.com/derrekyoung/ScriptsAndUtils/blob/master/...
デレック

14
を使用brew cask outdated | xargs brew cask reinstallして、古いキャスクのみを再インストールできます。
phdoerfler 2017

2
brew cask outdated「自動更新」が有効になっていないアプリの名前のみが出力されることに注意してください。古くなっているすべてのアプリをアップグレードするには、brew cask outdated --greedy --verbose | grep -v '(latest)' | awk '{print $1}' | xargs brew cask reinstall
次のコマンドを

48

自作キャスクアップグレード

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

インストールと使用法

brew tap buo/cask-upgrade
brew update
brew cu

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

brew cu --all

@XingangHuangはい
ovnia

26

インストールされたキャスクをリストすることは可能です:

brew cask list

そして、キャスクの再インストールを強制します:

brew cask install --force CASK_NAME

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

brew cask list | xargs brew cask install --force

1
それは本当に樽を更新しません。アップデートが利用できないキャスクであっても、再インストールを強制します。インストールしたキャスクの数とインストールされた期間に応じて、これにより不要なダウンロードがトリガーされ、時間がかかり、sudoアクセスのプロンプトが表示される場合があります。
Burhan Ali

20

パッケージをアップグレードするBashスクリプト

パスカルの回答に触発された

#!/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

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

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

として保存して /usr/local/bin/cask-upgradecask-upgrade後でローカルで実行できるようにします


あなただけではできませんbrew cask info $cask | grep "Not installed"か?
2016年

@Det hah ...まあ私はそれを見なかったが、私は今見ています。まあ、私は次のバージョンでそれをするかもしれません;-)
Atais

1
$ brew cask info $cask | grep "Not installed"エラーが発生しますError: This command requires a Cask token
eduncan911 2016年

1
@ eduncan911あなたはそれをスクリプトで使用しますfor cask in ${casks[@]}; do
Det

smacks head明らかに!聞き取れませんでした。
eduncan911 2016年

11

2017年12月現在: 醸造キャスクのアップグレード

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

brew cask outdated | xargs brew cask reinstall


基本的に私も同じですが、awk '{print $1}'2つの間にパイプをつないでいます。
Paul Nelson Baker

6

これを処理するために私が書いた関数は次のとおりです。私が個人的に使用するキャスクの一部はインストールに時間がかかるか、追加のプロンプトが必要なため、すべてを盲目的に再インストールすることを望まなかったことに注意してください。

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 
} 

私はOS X El Capitanを実行していますが、この関数をテストしたところ、-は関数名に使用できない文字であるため、シェルがエラーをスローしていました。重要な違い-bashでは機能しますが、shでは許可されないため、複数のシェルを持つシステム間での互換性のために#!/ bin / shを使用している場合、これは機能しません。ただし、ハイフンをアンダースコアに変更しても問題はありません。
ブライアン 'BJ'ホフパウアJr. '18年

5

@Ataisの回答に基づいて、私は彼のロジックをより良いものに拡張しました。実際にアップグレードを強制する前に、まずアップグレードするパッケージを検査する方法が必要でした。

  • $ brew-cask.shHomebrewのような出力をリストするだけ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

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

それは私の.dotfilesリポジトリにチェックインされています。だから、あなたはそれをあなたの中に素早くインストールすることができます~/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/、上記のステートメントの前に付けてください。


5

brew cask upgrade

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


このコマンドは存在しますが、実際にはいくつかのパッケージをアップグレードしません。
Acumenus

4

使うと思う

brew cask reinstall `brew cask outdated`

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


2
これは今あるはずですbrew cask reinstall `brew cask outdated`
gbonetti 2017年

1
更新@gbonettiをありがとう。あなたは正しいです。新しい「古い」オプションを使用すると、タスクも簡単かつ高速になります:-)。
Pranab Agarwal 2017年

2

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

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を実行します

次に、すべてのキャスクを循環して、それらの情報を表示します。以前にbrewの更新を行ったため、一部のcaskの最新バージョンがインストールされていないという情報が提供されます。

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

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

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

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

醸造キャスク情報出力

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

現時点では、状況を更新するのに十分ではないため、この時点でケースを切り替えます。それはあなたのユースケースに依存します。私にとって、私は時々新しいものを見たいだけです(新しいバージョン、バグ修正を待っています)が、今はブラウザーなどを閉じたくないので、実際に更新する時間はありません。

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

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

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




2

古くなった樽を入手してください:

醸造樽

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

醸造キャスク再インストール古いキャスク

デモスクリプト:

$ 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

古い樽を確認してください:

醸造樽

古いキャスクをすべてアップグレードする:

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

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

醸造樽アップグレード4k-video-downloader


2
こんにちは、StackOverflowへようこそ。これは古い質問であり、複数の回答があり、そのうちの1つは非常に人気があり、受け入れられているため、回答を編集して、質問への回答方法と、既存の回答よりも好ましい理由を詳しく説明してください。ありがとう。
MandyShaw

1

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

詳細については、私のgithubにアクセスしてください。

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



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.