リストされているすべてのパッケージがbashにインストールされていることを確認してください。

リストされているすべてのパッケージがbashにインストールされていることを確認してください。

私のバイナリは、次のブーストライブラリとそのパッケージに依存しています。

NAME                                  |          PACKAGE:
--------------------------------------+-----------------------------------
libboost_serialization.so.1.55.0      |  libboost-serialization1.55.0
libboost_thread.so.1.55.0             |  ibboost-thread1.55.0
libboost_date_time.so.1.55.0          |  libboost-date-time1.55.0
libboost_signals.so.1.55.0            |  libboost-signals1.55.0

だからパッケージリストを定義したいと思います。

boostlibnames="libboost-serialization1.55.0 libboost-thread1.55.0 libboost-date-time1.55.0 libboost-signals1.55.0"

今、実際のライブラリを実行する前にすべてがインストールされていることを確認したいと思いますapt-get install。 aptはパッケージがインストールされているかどうかを自動的に確認することを知っていますが、そうする前に、不足しているライブラリをインストールするかどうかをユーザーに尋ねたいと思います。

それでは、リストされているすべてのライブラリ(上記の変数にあります)がインストールされていることを確認する良い方法はありますか?

答え1

このdpkg -sコマンドはインストールされたパッケージの状態を返します。たとえば、私のシステムにインストールfirefoxされているものとインストールされてneditいないものを実行すると、次の結果が表示されます。

$ dpkg -s firefox
Package: firefox
Status: install ok installed
Priority: optional
Section: web
Installed-Size: 94341
Maintainer: Clement Lefebvre <[email protected]>
Architecture: amd64
Version: 41.0~linuxmint1+betsy
Replaces: firefox-l10n-af, firefox-l10n-ar, firefox-l10n-be, firefox-l10n-bg, firefox-l10n-bn-bd, firefox-l10n-ca, firefox-l10n-cs, firefox-l10n-da, firefox-l10n-de, firefox-l10n-el, firefox-l10n-en-gb, firefox-l10n-en-us, firefox-l10n-eo, firefox-l10n-es, firefox-l10n-et, firefox-l10n-eu, firefox-l10n-fa, firefox-l10n-fi, firefox-l10n-fr, firefox-l10n-fy, firefox-l10n-gl, firefox-l10n-gu, firefox-l10n-he, firefox-l10n-hi, firefox-l10n-hr, firefox-l10n-hu, firefox-l10n-id, firefox-l10n-is, firefox-l10n-it, firefox-l10n-ja, firefox-l10n-kn, firefox-l10n-ko, firefox-l10n-lt, firefox-l10n-lv, firefox-l10n-nb, firefox-l10n-nl, firefox-l10n-nn, firefox-l10n-pl, firefox-l10n-pt, firefox-l10n-pt-br, firefox-l10n-ro, firefox-l10n-ru, firefox-l10n-sk, firefox-l10n-sl, firefox-l10n-sq, firefox-l10n-sr, firefox-l10n-sv, firefox-l10n-th, firefox-l10n-tr, firefox-l10n-uk, firefox-l10n-zh
Provides: gnome-www-browser, www-browser
Breaks: firefox-l10n-en-us
Description: The Firefox web browser
 The Mozilla Firefox Web Browser.

$ dpkg -s nedit
dpkg-query: package 'nedit' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files,
and dpkg --contents (= dpkg-deb --contents) to list their contents.

したがって、次のコマンドを使用してパッケージがインストールされていることを確認できます。

#!/usr/bin/env bash

run_install()
{
    ## Prompt the user 
    read -p "Do you want to install missing libraries? [Y/n]: " answer
    ## Set the default value if no answer was given
    answer=${answer:Y}
    ## If the answer matches y or Y, install
    [[ $answer =~ [Yy] ]] && apt-get install ${boostlibnames[@]}
}

boostlibnames=("libboost-serialization1.55.0" "libboost-thread1.55.0"
                "libboost-date-time1.55.0" "libboost-signals1.55.0" "nedit")
## Run the run_install function if sany of the libraries are missing
dpkg -s "${boostlibnames[@]}" >/dev/null 2>&1 || run_install

答え2

私は仕事で次のコードを使用しています。簡単スラム、Ubuntuサーバーで最も広く使用されているソフトウェアパッケージをすばやくインストールするのに役立ちます。このコードは、リストされたパッケージがインストールされていることを確認します。

#!/usr/bin/env bash

packages=("curl" "gnupg2" "ca-certificates" "lsb-release")

for pkg in ${packages[@]}; do

    is_pkg_installed=$(dpkg-query -W --showformat='${Status}\n' ${pkg} | grep "install ok installed")

    if [ "${is_pkg_installed}" == "install ok installed" ]; then
        echo ${pkg} is installed.
    fi
done

結果:

ここに画像の説明を入力してください。

答え3

以下に、すべての関連パッケージのリストを示します。いいえ取付ける:

dpkg -l $boostlibnames 2>&1 | awk '{if (/^D|^\||^\+/) {next} else if(/^dpkg-query:/) { print $6} else if(!/^[hi]i/) {print $2}}' 

これにより、ヘッダー行をスキップし、dpkg -ldpkg-queryが不明なパッケージについて文句を言う行と次の行が印刷されます。いいえhiまたはii(Hold InstまたはInstall Inst)で始まります。

通常、ヘッダー行を削除するかawk 'NR<=5 {next} ; ...'同じ操作を実行しますが、この場合、出力も取得できるようにstderrをstdoutにリダイレクトするため、最初の5行だけを削除することはできません。sed -e '1,5d'dpkg -ldpkg-querydpkg -l

これには、インストール、アンインストール、アンインストールされなかった、またはエラーが原因でインストールが失敗した、または部分的に完了したパッケージが表示されます。

答え4

#to check package is installed or not without distribution dependency
#!/bin/bash
read -p "Package Name: " pkg
which $pkg > /dev/null 2>&1
if [ $? == 0 ]
then
echo "$pkg is already installed. "
else
read -p "$pkg is not installed. Answer yes/no if want installation_ " request
if  [ $request == "yes" ]
then
yum install $pkg
fi
fi

関連情報