回答:
半関連のStackOverflowの質問で次のことがわかりました。私が必要とする答えは、実際にはそこの質問に完全には答えていませんでした(そして正しい答えとして選択されませんでした)。
yum list installed PACKAGE_NAME
このコマンドは、人間が読み取れる出力を返しますが、さらに重要なこととして、終了ステータスコードを返します。0は、パッケージが示している 1は、パッケージがされていることを示し、インストールされていないインストール(パッケージが有効であるかどうかをチェックしませんので、yum list installed herpderp-beepbopboop
同じように「1」を返しますyum list installed traceroute
あなたはトレースルートがインストールされていない場合は意志)。その後、「$?」を確認できます この終了コード用。
出力はやや直感に反するので、ラッパー関数で@Chris Downsの「凝縮」バージョンを使用して、出力をより「論理的」にしました(1 =インストール済み0 =未インストール)。
function isinstalled {
if yum list installed "$@" >/dev/null 2>&1; then
true
else
false
fi
}
使用法は
if isinstalled $package; then echo "installed"; else echo "not installed"; fi
置き換えreturn
への呼び出しでステートメントtrue
とfalse
値のbashを返すことを期待しながら、(偽のために、真の場合は1を、すなわち0)を、直感的/機能をより読みやすくするのに役立ちます。
スクリプトで1つのパッケージだけをチェックしている場合は、yum list installed
直接テストした方が良いかもしれませんが、(IMHO)この機能により、何が起こっているかを理解しやすくなり、その構文はyum
すべてのリダイレクトよりもはるかに簡単に覚えられます出力を抑制します。
isInstalled
パッケージがインストールされている場合は1を返します。ただし、bashでは1がfalseと評価されるため、「not installed」がエコーされます。
return
ステートメントをtrue
and への呼び出しに置き換えたfalse
ため、関数は簡単に読み取り可能ですが、bashが期待する出力を返します。
質問「via yum」の前提条件を完全に満たしているわけではありませんが、「yum -q list」よりも高速です。
rpm -q <package_name>
おそらくインストールされているバージョンの正確な名前と、インストールされている場合はエラーコード「0」、インストールされていない場合は「1」を返します。
rpm
ローカルパッケージマネージャーであるため、間違いなく高速です。yum
リモートリポジトリにパッケージを扱うためである
yumの便利なスクリプト:
#!/bin/sh
pckarr=(wget mlocate bind-utils ANY_RANDOM_PACKAGE_NAME)
yum update -y
for i in ${pckarr[*]}
do
isinstalled=$(rpm -q $i)
if [ ! "$isinstalled" == "package $i is not installed" ];
then
echo Package $i already installed
else
echo $i is not INSTALLED!!!!
yum install $i -y
fi
done
updatedb
pckarr配列で、インストールするパッケージをリストするか、インストールされているかどうかを確認します。
$?
コマンドを条件にラップするだけです:if yum list installed "$package" >/dev/null 2>&1; then [...]