Петля, чтобы проверить, установлен ли пакет 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 

В результате

  • Хороший стиль / практика для разделителей в именах файлов (или каталогов)
  • Как безопасно разрешить scp, но не ssh
  • Установка временных псевдонимов bash при входе в папку
  • Строка подсказки Bash появляется в той же строке, что и вывод команды curl
  • Как я могу сказать, какая команда означает псевдоним?
  • Получить список всех файлов по маске в терминале
  •  Install: target Installed is not a directory 

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

  • Объединить файлы csv с условиями
  • Отправка настраиваемого контента на основе определенного поиска в файле журнала
  • В строке использования моего пользовательского сценария оболочки также должен отображаться --help и --version?
  • Добавить имя файла в качестве первой строки файла в сценарии оболочки
  • Измените местоположение .bashrc
  • Тестирование, если строка существует внутри массива строк
  • 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 .

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

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