Мой двоичный файл зависит от этих библиотек наддува и соответствующих пакетов:
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 автоматически проверит, установлены ли пакеты, но я хотел бы указать пользователю, хочет ли он установить недостающие библиотеки, прежде чем делать это.
Так есть ли хороший способ проверить, установлены ли все перечисленные библиотеки (в переменной, как указано выше)?
Ответы:
Команда
dpkg -s
возвращает статус установленных пакетов. Например, в моей системе, если я запускаю ее, дляfirefox
которой установлено, аnedit
что нет, я получаю:Таким образом, вы можете использовать эту команду, чтобы проверить, установлен ли пакет:
источник
installed = installed || isInstalled(libArray[i])
. Точно так же я хотел бы поместить false в переменную, если один или несколько не были установлены. Я думаю, что я могу сделать этоif
, но это много кода для ничего.apt-get install
все из них. Все, что установлено, будет просто проигнорировано. Дайте мне знать, что вы хотите, и я отредактирую это. В принципе, вам нужно изменить ,|| echo ...
чтобы|| installed=1
или что - то.if
оператором, но переменная будет предпочтительнее. Я планирую превратить это в функцию.dpkg -s
могу проверять сразу несколько пакетов.Я сделал эту функцию для системы CentOS сегодня.
Ну, я немного изменил функцию. Быстрее и не нужно больше петли.
Аналог Debian / Ubuntu:
источник
Следующее даст вам список всех соответствующих пакетов, которые не установлены:
Это пропускает
dpkg -l
строки заголовка, а затем выводит строки, в которых dpkg-query жалуется на неизвестный пакет, и строки, не начинающиеся сhi
илиii
(Hold Inst или Install Inst).Обычно я хотел бы сделать что-то подобное
awk 'NR<=5 {next} ; ...'
илиsed -e '1,5d'
избавиться отdpkg -l
строк заголовка в России, но в этом случае мы перенаправляем stderr в stdout, чтобы получать жалобы,dpkg-query
а такжеdpkg -l
вывод, поэтому мы не можем просто удалить первый 5 строк.Это покажет пакеты, которые никогда не устанавливались, не удалялись, не удалялись, или где установка не удалась / частично завершена из-за ошибки.
источник
В своей работе я использую следующий код под названием Easy Bash , который помогает быстро установить самые популярные пакеты на серверах Ubuntu. Этот код будет проверять установленные пакеты или нет.
Результат:
источник
источник