Homebrew Cask を使用して、OS Xにアプリケーションをインストールします。インストールされているすべてのキャスクをアップグレードするにはどうすればよいですか?
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での重複した問題 にあります。
これは、樽をアップグレードするための断然最良の解決策だと思います。
source:https://github.com/buo/homebrew-cask-upgrade
インストールと使用法
brew tap buo/cask-upgrade
brew update
brew cu
(オプション)最新としてマークされたものを含む古いアプリを強制的にアップグレードします。
brew cu --all
以下を使用して、インストールされたキャスクをリストすることができます。
brew cask list
そして、次のコマンドで樽の再インストールを強制します。
brew cask install --force CASK_NAME
したがって、最初のコマンドの出力を2番目のコマンドにパイプして、すべてのキャスクを更新します。
brew cask list | xargs brew cask install --force
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 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
としてローカルで実行できます
2017年12月現在、次を使用します:brew cask upgrade
[Homebrewがcaskのアップグレードコマンドを導入した2017年12月以降廃止されました]私は単に次を使用します。
brew cask outdated | xargs brew cask reinstall
これを処理するために作成した関数を次に示します。使用している樽の一部はインストールに時間がかかるか、追加のプロンプトが必要になるため、個人的にすべてを盲目的に再インストールすることは望ましくありません。
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
}
brew cask upgrade
upgrade
コマンドは最近Homebrew Caskで導入され、他の回答で説明されている他のすべての手動メソッドを廃止する必要があります。
私は使用すると思います
brew cask reinstall `brew cask outdated`
トリックを行います。これにより、アプリケーションの以前のバージョンが削除され、新しいバージョンがインストールされます。
@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 ;にチェックインされていますそのため、~/bin
withにすばやくインストールできます。
$ 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/
を付けてください。
deinspanjer、から提供されたコードを改善しました。chocolatey(のようなnoopコマンドを模倣しようとしました。 choco update --noop/choco old()。
#!/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を発行するのを忘れていたため、実際に解析する「インストールされていない」行はありませんでした(アプローチ全体の基礎)。
これがお役に立てば幸いです。
brew cask outdated | xargs brew cask reinstall --force
私は自分でそのような台本を作りました。 github https://github.com/pesh1983/brew_cask_upgrade をご覧ください。説明はかなり充実していますが、さらに質問がある場合は、お気軽にお問い合わせください。それは公平なアップグレードを行います:アンインストールとインストール。したがって、必要なクリーンアップは「brew」自体によって実行されます。
古くなった樽を入手:
醸造樽
アップグレードキャスク:
醸造キャスクは古いキャスクを再インストールします
デモスクリプト:
$ 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アプリを選択できるようにしました。アプリを考慮から除外することもできます。
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
私が使う
brew cask install --force `brew cask list`
私が読んだものに基づいて、最新として定義されているアプリを含む更新されるファイルをリストするファイルを作成するスクリプトを作成しました。その後、要件に合わせてファイルを変更し、olinstスクリプトを使用して更新をインストールできます。
詳細については、私のgithubをご覧ください。
古くなった樽を確認する:
醸造樽
すべての古い樽のアップグレード:
醸造キャスクのアップグレード
特定の樽をアップグレードする場合は、アップグレード後に樽名を追加するだけです(例:4k-video-downloader):
brew cask upgrade 4k-video-downloader