自作パッケージがインストールされているかどうかを検出する


104

システムにいくつかの自作パッケージがインストールされているかどうかを検出するシェルスクリプトを記述しようとしています。それを達成するためにbrewコマンドを使用する方法はありますか?

の終了コードを使ってみましたbrew install <formula> --dry-run。ただし、パッケージが欠落している場合は、これによってビルドされます。


brew --cellar "$formula" >/dev/null 2>&1 --cellar formula: Display the location in the cellar where formula would be installed, without any sort of versioned directory as the last path. brewのmanページ。答えとしてそれを与えるのが大好きだったでしょう
166_MMX

if [ ! -x "$(command -v PKG_EXEC)" ]; then # package not installed fi
JBallin

回答:


164

使用できます

brew ls --versions myformula

それぞれの数式のインストール済みバージョンを出力します。式がインストールされていない場合、出力は空になります。

で入手できる最新バージョンの自作を使用する場合は、これをbrew update実行するだけです(Slavenに感謝)。

if brew ls --versions myformula > /dev/null; then
  # The package is installed
else
  # The package is not installed
fi

とはいえ、それぞれの自作パッケージをチェックするだけではなく、ツールの存在を確認することをお勧めします(たとえば、で実行可能ファイルを検索するなど$PATH)。人々は実際にはかなり大量の方法でツールをインストールする傾向があり、自作はその1つにすぎません。


6
以来github.com/Homebrew/brew/commit/...は終了コードを確認するのに十分である:式がインストールされていない場合、偽(1)が返されます。
Slaven Rezic 2016年

では、を実行するとif macchanger --help > /dev/null; thenmacchangerがインストールされているかどうかが確認されますか?
匿名

@KeeganKuhnそれが成功した場合macchanger、現在のシェルにあり$PATHます。失敗した場合は、PATHで使用できないか、インストールされていません。
Holgerはちょうど

2
@Keegan Kuhn-アプリケーションが(実行せずに)PATH上にあるかどうかを本当に確認したい場合は、を使用できますwhich -s-s「何も出力を-sない何も見つからない場合は、単に実行ファイルのいずれかが見つかった場合は0を返す、または1、。」としてオプション(サイレント)が文書化されています 適切な使用法は次のようなものですwhich macchanger || echo "macchanger not on PATH"
ジェフリー・アギレラ

7

どうですか?

for pkg in macvim ngrep other needed packages; do
    if brew list -1 | grep -q "^${pkg}\$"; then
        echo "Package '$pkg' is installed"
    else
        echo "Package '$pkg' is not installed"
    fi
done

あなたのソリューションはpython@3、としてインストール(およびリスト)されているような、いくつかのバージョン化された数式では機能しませんpython3
Daniele Orlando

1
# install if we haven't installed any version
brew ls --versions $lib || brew install $lib
# install if we haven't installed latest version
brew outdated $lib || brew install $lib

1

最も簡単な2ライナー:ステップ1、それがインストールされていることを確認します

$ realpath . || brew install coreutils

これにより、現在のディレクトリの実際のパスが出力されます。そうでない場合は、インストールされます。そして、それはrealpathが見つからなくても失敗しません。

ステップ2、実際のコードで呼び出します。

$ realpath ${someDir}

これは、特定のツールの簡単なソリューションです。これは一般的なソリューションではありません。
iltempo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.