Команда менеджера пакетов, которая возвращает 0 или 1 в Ubuntu / Debian, если пакет установлен или нет - PullRequest
2 голосов
/ 14 мая 2011

Я пишу скрипт установки пакета на Perl. Мне нужна команда (возможно, команда ОС), которая возвращает простой 0 или 1 скрипту вызывающей стороны, если установлен пакет Ubuntu / Debian или нет.

Я пробовал

      dpkg -s

Всегда возвращает 0.

      dpkg -L 

почти работает, но если пользователь не

      apt-get --purge remove 

пакеты, некоторые файлы остаются и всегда возвращают 0

Я не хочу вводить текст - мне нужно просто истина или ложь. Есть идеи?

@ Энди:

   aptitude remove unixodbc -y

   dpkg-query -W unixodbc; echo $?
   unixodbc        2.2.11-21
   0

   aptitude install unixodbc -y

   dpkg-query -W unixodbc; echo $?
   unixodbc        2.2.11-21
   0

Ответы [ 3 ]

3 голосов
/ 14 мая 2011

Возможно, не идеально, но это работает:

dpkg -s "$package" | grep '^Status:' | grep -q ' installed'

Или просто

dpkg -s "$package" | grep -q '^Status:.* installed'
1 голос
/ 14 мая 2011

Я думаю, что это так:

test -n "`aptitude search '?name(^packagename$)~i'`"

Не будет работать с виртуальными пакетами.

0 голосов
/ 14 мая 2011

Если вы собираетесь использовать базу данных dpkg, я согласен с предложениями "use grep".Принимая во внимание вероятность того, что формат вывода инструментов пакета изменяется в зависимости от сложности альтернативных решений, вероятно, лучше использовать grep.

Тем не менее, есть несколько возможностей:

  1. используйте dpkg --get-selections.Состояние выхода всегда равно нулю, но вывод очень прост: <package><white space><status>.Это «запрошенное состояние» (install / hold / deinstall / purge), которое может отличаться от фактического состояния пакета, но обычно не будет.

  2. использовать одну из утилит вdctrl-tools или dpkg-awk пакеты

  3. реализуют тест, который непосредственно определяет наличие зависимости, например, используйте pkg-config или ищите программу в PATH.Это имеет то преимущество, что позволяет продолжить установку в системах, где зависимость была построена вручную и установлена ​​без ведома менеджера пакетов.Это также делает ваш скрипт установки более переносимым.

  4. , вы можете захотеть посмотреть PackageKit

...