パッケージをインストールするスクリプトを作成しようとしていますが、スクリプトの後半のいずれかの時点で失敗すると、インストールされているすべての項目がロールバックされます。もちろん、ユーザーが以前にパッケージをインストールした場合は、その下からパッケージを削除したくありません。私のスクリプトは、以前にyumを介してパッケージがインストールされたことをどのように知ることができますか?
答え1
準関連ウェブサイトで以下を見つけました。StackOverflowの質問;私が必要とする答えは実際にそこにある質問に対する完全な答えではないので(正解では選択されていません)、だから他の人がより簡単に見つけることができるようにここに投稿しなければならないと思いました。
yum list installed PACKAGE_NAME
このコマンドは人間が読めるいくつかの出力を返しますが、より重要なことは、終了ステータスコード0がカプセル化されていることを意味します。はいインストール済み、1はパッケージいいえインストール済み(パッケージが有効であることを確認しないため、Tracerouteがインストールされていないかの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
ステートメントをand呼び出しに置き換えると、false
bashが期待する値(つまりtrueは0、falseは1)を返し、関数をより読みやすく直感的にするのに役立ちます。
スクリプトでパッケージを確認する場合は、自分でテストする方が良いかもしれませんが、(IMHO)この機能を使用すると、何が起こっているのかを理解しやすくなり、構文を抑制するためのすべてのリダイレクトよりもyum list installed
覚えやすくなります。yum
出力。
答え2
「via yum」という質問を正確に満たすことはできませんが、「yum -q list」よりも速い前提条件は次のとおりです。
rpm -q <package_name>
インストールされている場合はエラーコード「0」、インストールされていない場合は「1」でインストールできるバージョンの正確な名前を返します。
答え3
より簡単な1行:
yum -q list installed packageX &>/dev/null && echo "Installed" || echo "Not installed"
答え4
$?
yumから戻り値を読み取ることもできます。すべてが正常な場合はゼロでなければならず、そうでなければyumが直面する問題の種類に応じて正の値でなければなりません。問題が発生したときに別の措置を講じたい場合は、これは良いアプローチです。