2012-05-13 5 views
4

Я полные недоноски в скрипте, что я хочу, это скрипт, который определяет список библиотек/пакета в настоящее время установлено, если не установить их без разрешения пользователянайти, установлена ​​ли библиотека, используя сценарий оболочки

Я хочу чтобы определить, библиотека/пакет уже установлен или нет в системе

Я знаю поиска профпригодности команд, но я искал лучшее решение

например, у меня есть определить (в сценарии оболочки) проверить на библиотека readline/пакет теперь, как я могу изнутри sh ell (я хочу создать) знаю, что в настоящее время установлен пакет readline или нет.

Любая идея или предложение, безусловно, поможет

+0

Какой менеджер пакетов? Какая оболочка? Какой язык? Вам нужно предоставить подробную информацию, чтобы получить помощь. – Blender

+0

Определите «библиотека/пакет». Это покрывает много территории. Кроме того, для установки без вмешательства пользователя требуется root-доступ. –

+0

Технически устанавливая вещи, нормальный путь распространения, т. Е. Системный, потребует доступа root. Схватить личную копию откуда-нибудь и сохранить ее в каталоге пользователя для использования одним пользователем/приложением не будет, хотя я лично был бы недоволен, если бы меня не попросили подтвердить какие-либо выборки бинарных файлов с отдаленным исходным кодом. Но для чего-то общего, такого как readline, я бы подумал, что ** намного лучше запускать упаковщик дистрибутива для его доставки. –

ответ

8

То, что я хочу, чтобы определить библиотека/пакет уже установлен или нет в системе

dpkg -s не требует корневого разрешения, и будет отображать сведения о статусе пакета.

Пример оболочки сценария:

#!/bin/sh 

for P; do 
    dpkg -s "$P" >/dev/null 2>&1 && { 
     echo "$P is installed." 
    } || { 
     echo "$P is not installed." 
    } 
done 

Использование является:

script.sh package1 package2 .... packageN

+2

** Будьте осторожны **: если 'dpkg -s' возвращает' 0', это не обязательно означает, что пакет ** полностью/правильно установлена ​​**. 'dpkg -s' также возвращает' 0', если пакет находится в 'half-configure' или в состоянии' config-files' (и я думаю, что и в 'half-installed', но я этого не проверял). См. [Справочную страницу 'dpkg'] (http://manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html) для дальнейших« неполных »состояний. – Ignitor

2

Для просто делать тест, казалось бы, что вы могли бы Grep вывод команды, такие как LDCONFIG -p для вашей библиотеки интересов.

Или вы могли бы предоставить крошечную тестовую программу, связанную с нужной библиотекой, попробовать запустить ее и протестировать без сбоев.

-1

Вы, вероятно, может сделать то, что вы хотите с dpkg

0

Если вы пытаетесь настроить проверку зависимости, правильное решение, чтобы создать фиктивный пакет, который Depends: на пакеты, которые необходимо установить. Существует инструмент под названием equivs, который несколько помогает с этим. (Тем не менее, его критиковали как «чрезмерно спроектированные», конечно, если вы знакомы с форматом пакетов Debian, вам может не понадобиться отдельный инструмент, если ваши требования просты.) Затем вы просто установите этот пакет и он будет тянуть пакеты, которые указаны как зависимости.

Вы все еще должны знать, что библиотека, которая обеспечивает libreadline.so, является libreadline5-dev. Debian package search поможет найти список требуемых вам предметов. Depends:

+0

'apt-file' - еще один хороший способ поиска« какой (доступный) пакет содержит имя файла X ». –

+0

@thepaul спасибо, я знаю apt-файл, но это не требование здесь – Viren

Смежные вопросы