나열된 모든 패키지가 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

관련 정보