MySQLサーバーをインストールしたいインストールbashスクリプトを書きたいのですが。
Linux Mintでは、私はコードに従っていました:
apt-get -y --force-yes install mysql-server-5.6
しかし、私は新しいDebian 8をインストールしましたが、mysql-server
はなく、代わりにmariadb
があります。
パッケージが存在するかどうかを確認するにはどうすればよいですか?
パッケージがインストールされているかどうかを示すdpkg -s
があることを知っています。
(以下はUbuntuからのものですが、同じ手法が明らかにDebianでも機能します)
$ apt-cache show screen
Package: screen
Priority: optional
Section: misc
Installed-Size: 950
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Axel Beckert <[email protected]>
Architecture: AMD64
Version: 4.1.0~20120320gitdb59704-9
Depends: libc6 (>= 2.15), libpam0g (>= 0.99.7.1), libtinfo5
Suggests: iselect (>= 1.4.0-1) | screenie | byobu
Filename: pool/main/s/screen/screen_4.1.0~20120320gitdb59704-9_AMD64.deb
Size: 645730
...
パッケージが存在する場合、情報が表示されます。そうでない場合は、次のように表示されます。
$ apt-cache show foobar
N: Unable to locate package foobar
E: No packages found
さらに、一致するパッケージが見つからない場合、apt-cache
の終了コードはゼロ以外になります。
追加メモ:apt-cache show package
を使用している場合、パッケージは仮想パッケージ(存在しないが、たとえば他のパッケージによって参照されているもの)であれば、次のようになります。 :
N: Can't select versions from package 'package' as it is purely virtual
N: No packages found
これのexit code
はゼロです(これは、私の意見では少し誤解を招くようです)。
私は使うだろう dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"
。
mysql-server
パッケージがインストールされており、インストールされている場合は、この事実が画面に出力されます。より洗練されたソリューションは、bash(テストされていない)の場合:
function package_exists() {
return dpkg -l "$1" &> /dev/null
}
そのため、スクリプトで次のことができます。
if ! package_exists mysql-server ; then
echo ”Please install mysql-server!"
fi
ワンライナーでは:
apt-cache pkgnames | grep -q "\<$your_package_name\>"
存在する場合は0、存在しない場合は1で終了します。
ボーナス:ファイル「packages_we_want」にリストされている、複数のパッケージの効率的なチェック、1行に1つ、sort
でソート:
apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want
は必要なすべてのパッケージをリストしますが、リポジトリにはしないでくださいが存在します。
apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want
は、リポジトリに存在し、必要なすべてのパッケージをリストします。