Здравствуйте!
Собственно вопрос:
Как из Shell скрипта определить установлен ли пакет в системе?
Система Kubuntu 7.04 (deb)
Заранее спасибо.
>Здравствуйте!
>Собственно вопрос:
>Как из Shell скрипта определить установлен ли пакет в системе?
>Система Kubuntu 7.04 (deb)
>Заранее спасибо.man dpkg
>>Здравствуйте!
>>Собственно вопрос:
>>Как из Shell скрипта определить установлен ли пакет в системе?
>>Система Kubuntu 7.04 (deb)
>>Заранее спасибо.
>
>man dpkg+1
если пакет по каким-то причинам был установлен не из репозитория, а из исходников и его нет в базе установленных пакетов, то можно использовать pkg-config:
$ pkg-config --modversion <package>
Если разработчики пакета не создали <package>.pc файл для pkg-config, то придется искать файл такого пакета в ручную (бинарники, либы, .h).
>Если разработчики пакета не создали <package>.pc файл для pkg-config, то придется искать файл такого пакета в ручную (бинарники, либы, .h).Ага, а потом ещё и проверять на работоспособность -- как в autoconf.
В красной шапочке rpm -q имя пакета
>В красной шапочке rpm -q имя пакетаМолодец, хороший мальчик. Но к сожалению должен тебя огорчить ubuntu это не красная шапочка и вообще не rpm-based дистр, к счастью. А найти в мане по dpkg опцию l или L дело пары минут и, скорее всего, задавший вопрос с этим давно справился.
>>В красной шапочке 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
donereturn $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Всем спасибо за помощь!