2016-10-19 11 views
0

ビルドスクリプト(bashまたはMakefile)を改良して、必要に応じていくつかの前提条件をインストールしようとしています。パッケージがインストールされていない場合にのみパッケージのリストをインストールするにはどうすればよいですか?

私はパッケージの長いリスト(10-15)を持っています。インストールされていない場合にのみインストールします。

ビルドスクリプトはルート以外で実行されるため、sudo yum installは必要な場合にのみ(少なくとも1つのパッケージがインストールされていない場合)のみ実行します。

私の現在の実装では明らかに最適ではない:

for PACKAGE in a b c ... ; do 
    yum list installed $PACKAGE >/dev/null 2>&1 || sudo yum install -q -y $PACKAGE ; 
done 

はどうすればこれを行うことができますか?

+0

Yumはパッケージのリストを取得できます。ループなしで直接試しましたか? – cohenjo

+0

パラメータとして複数のパッケージ名を指定すると、指定されたパッケージのいずれかが見つからない場合にエラーコードが返されません。たとえば、aがインストールされていてbが正しくない場合は、 "a b"は成功(0)を返します。 – sorin

答えて

0

あなたは、もちろん、単にファイルにインストールされたパッケージのリストを入れて、ループ内でその反対のgrepを実行していますが、任意のファイルを作成避けたいはずです可能性があり、rpmを実行すると、動作するはずです:

for p in a b c ... ; do 
    rpm -q > /dev/null 2>&1 $PACKAGE || sudo yum install -q -y $p 
done 

パッケージ情報を照会するとき、rpmは、パッケージが見つかるとゼロを返し、そうでない場合は0以外を返します。

関連する問題