URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6846
[ Назад ]

Исходное сообщение
" Определить установлен ли пакет"

Отправлено Udzhen , 15-Окт-07 14:27 
Здравствуйте!
Собственно вопрос:
Как из Shell скрипта определить установлен ли пакет в системе?
Система Kubuntu 7.04 (deb)
Заранее спасибо.

Содержание

Сообщения в этом обсуждении
" Определить установлен ли пакет"
Отправлено newser , 15-Окт-07 14:48 
>Здравствуйте!
>Собственно вопрос:
>Как из Shell скрипта определить установлен ли пакет в системе?
>Система Kubuntu 7.04 (deb)
>Заранее спасибо.

man dpkg


" Определить установлен ли пакет"
Отправлено vic , 15-Окт-07 15:05 
>>Здравствуйте!
>>Собственно вопрос:
>>Как из Shell скрипта определить установлен ли пакет в системе?
>>Система Kubuntu 7.04 (deb)
>>Заранее спасибо.
>
>man dpkg

+1

если пакет по каким-то причинам был установлен не из репозитория, а из исходников и его нет в базе установленных пакетов, то можно использовать pkg-config:
$ pkg-config --modversion <package>
Если разработчики пакета не создали <package>.pc файл для pkg-config, то придется искать файл такого пакета в ручную (бинарники, либы, .h).


" Определить установлен ли пакет"
Отправлено anonymous , 15-Окт-07 18:16 
>Если разработчики пакета не создали <package>.pc файл для pkg-config, то придется искать файл такого пакета в ручную (бинарники, либы, .h).

Ага, а потом ещё и проверять на работоспособность -- как в autoconf.


" Определить установлен ли пакет"
Отправлено Voblin , 16-Окт-07 12:59 
В красной шапочке rpm -q имя пакета


" Определить установлен ли пакет"
Отправлено angra , 16-Окт-07 19:01 
>В красной шапочке rpm -q имя пакета

Молодец, хороший мальчик. Но к сожалению должен тебя огорчить ubuntu это не красная шапочка и вообще не rpm-based дистр, к счастью. А найти в мане по dpkg опцию l или L дело пары минут и, скорее всего, задавший вопрос с этим давно справился.


" Определить установлен ли пакет"
Отправлено Udzhen , 20-Окт-07 02:36 
>>В красной шапочке rpm -q имя пакета
>
>Молодец, хороший мальчик. Но к сожалению должен тебя огорчить ubuntu это не
>красная шапочка и вообще не rpm-based дистр, к счастью. А найти
>в мане по dpkg опцию l или L дело пары минут
>и, скорее всего, задавший вопрос с этим давно справился.

Да, вы правы. Проблемму я уже давно решил.
Требовалось написать процедуру которая проверяет установлен ли пакет пакет (под Debian-based системы).
Собственно вот что получилось:


TRUE=0
FALSE=1

# Процедуре передается список пакетов в качестве первого аргумента,
# и если хотя бы один пакет не установлен, то процедура вернет FALSE.
function PkgIsInstalled
{
    pkg_list=$(dpkg-query --showformat '${Package} ${Status}\n' -W $1 | \
        grep 'ok installed$' | sed -n -e 's/ .* ok installed$//p')
    for pkg_name in $1
    do
        echo "$pkg_list" | grep -q "^$pkg_name\$"
        if [ $? -ne $TRUE ]; then
            return $FALSE;
        fi
    done

    return $TRUE
}

# Использование...

pkg_name="здесь_имя_пакета"

PkgIsInstalled $pkg_name
if [ $? -ne $TRUE ]; then
    echo "Package \"$pkg_name\" is not installed!"
    read -p "Install now? [yes]/[no] " cmd
    if [ "$cmd" = "yes" ] || [ "$cmd" = "y" ]; then
        sudo aptitude update
        sudo aptitude install $pkg_name
        return $?
    fi
fi

Всем спасибо за помощь!