Петля, чтобы проверить, установлен ли пакет Debian или нет.

Мне нравится проверять, установлены ли несколько пакетов на Debian / Ubuntu. Вот моя попытка создать скрипт:

query=`dpkg-query -W -f '${Status}'` ok="install ok" if ! [ `$query` curl == "$ok" ] ;then apt-get -y -qq install curl >> /dev/null 2>&1 fi 

В результате

 Install: target Installed is not a directory 

но это должно быть то, что вы можете видеть во второй переменной. У меня головная боль, npw, потому что я не могу найти правильный способ справиться с этим.

  • Сценарий оболочки не запущен в crontab
  • Как мне запустить команду в другом tty?
  • Как узнать, содержит ли PWD пробелы или буквы, отличные от английского?
  • Как написать скрипт bash без использования sudo в нем?
  • Рекурсивно сравнивать содержимое каталога по имени, игнорируя расширения файлов
  • Как получить символ в заданной позиции строки в сценарии оболочки?
  • Введите URL-адрес и статус HTTP-статуса
  • Возьмите grep значение и выведите количество и значение вместе
  • 3 Solutions collect form web for “Петля, чтобы проверить, установлен ли пакет Debian или нет.”

    Кажется, вы делаете что-то ненужным образом. Почему не просто

     dpkg -l curl || apt-get -y -qq install curl > /dev/null 2>&1 

    В конце концов, вы попросили один-лайнер. Поскольку, по-видимому, все, что вам нужно, это знать, доступен ли curl , вы также можете просто сделать

     type curl >/dev/null 2>&1 || apt-get -y -qq install curl 

    В вашем коде есть две ошибки, одна серьезная – не так много:

    1. Вы используете backticks дважды. Также не используйте обратные ссылки. Используйте подстановку команд следующим образом: $(command ...)

       query=$(dpkg-query -W -f '${Status}') 

      Запрос уже будет содержать результат вызова команды. Когда вы сейчас выполняете

       `$query` 

      вы теперь попытаетесь выполнить результат, который в вашем случае является строкой, для меня это очень длинная строка, состоящая из install ok installedinstall ok installed...

    2. (Костас указал на это) Результат dpkg-query -W -f '${Status}' curl будет install ok installed , а это не то, что вы проверяете.

    Нет никакого смысла проверять, установлен ли пакет и установка, если нет. Или:

    1. Вы проверяете, что вы хотите от пакета, например, curl binary: command -v curl , чтобы пользователь мог предоставить альтернативы, если им это нравится.
    2. Вы проверяете, установлена ​​ли какая-то конкретная версия того, что вы хотели, используя что-то вроде apt-cache policy .

    Если ни один из случаев не применяется, проще установить его непосредственно.

    Interesting Posts

    Проблема с ключом Gnome

    Как я могу перенаправить вывод в файл, когда программа построена с помощью библиотеки ncurses

    системный таймер каждые X дней в 04:00

    Преобразование субтитров на основе изображений в текстовые субтитры внутри файла MKV

    Как открыть файл с редактированием скрытого хранилища изнутри vim?

    Как выйти из режима поиска истории bash?

    Как улучшить IO, когда есть много случайного чтения и записи?

    Установленный libncurses5-dev, но не может сделать menuconfig!

    Apache: Имитировать 100 новых подключений в секунду с помощью ab

    Почему несколько экземпляров Mate-терминала имеют один и тот же PID?

    В чем необходимость команд «halt –poweroff», «halt –reboot», «poweroff –reboot» и «reboot –poweroff»?

    Где в Apache 2 вы устанавливаете директиву ServerName глобально?

    Как выбрать, какой клиент bittorrent вызывается при нажатии загруженного файла торрента в хром?

    Почему параметр xargs -i устарел?

    Запуск pbk-файла в Linux

    Linux и Unix - лучшая ОС в мире.