Я хотел бы написать сценарий установки bash, где я хотел бы установить сервер MySQL.
На Linux Mint я следовал код:
apt-get -y --force-yes install mysql-server-5.6
но я установил новый Debian 8 и нет mysql-server
- вместо этого есть mariadb
.
Как я могу узнать, существует ли пакет?
Я просто знаю, что есть, dpkg -s
который должен сказать, установлен ли пакет.
--force-yes
деактивирует всю безопасность, так что вы действительно можете сломать вашу систему до такой степени, что вам не придется ее ремонтировать. Также:--force-yes
переопределяет (деактивирует)-y
. где последний может быть вариантом выбора: длинная форма-y
есть--assume-yes
, и это то, что он делает; Сказать «да» до тех пор, пока это не станет по-настоящему уродливым, с риском для хаоса между основными элементами, основами и т. Д.,--force
Переопределяет, нарушает безопасность (выучил это нелегко)--simulate
вариантapt-get
сделать на--dry-run
всякий случай/etc/apt/sources.list
, верно?Ответы:
(ниже приведена Ubuntu, но та же самая техника, очевидно, работает и в Debian)
Если пакет существует, информация будет отображаться. Если нет, вы увидите что-то вроде:
Кроме того, код выхода
apt-cache
будет ненулевым, если не найдено подходящих пакетов.Дополнительное примечание: если вы используете,
apt-cache show package
где пакет является виртуальным (тот, который не существует, но на который, например, ссылаются другие пакеты), вы получите:Это
exit code
ноль (что немного вводит в заблуждение, на мой взгляд.)источник
sources.list
этой команды:apt-cache search *searchstring*
. Эта команда также выполняет поиск в описании пакетов и может помочь вам найти пакеты, в которых вы не знаете точного имени пакета.apt-cache search ...
возвращает любые совпадения и приложение. возвращает 0, даже если ничего не найдено, что непрактично в скрипте bash.Я бы использовал
dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"
.Он проверит, установлен ли
mysql-server
пакет и, если да, выведет этот факт на экран. Более сложное решение было бы в bash (не проверено):Так что можно сделать в сценарии:
источник
В однострочнике:
apt-cache pkgnames | grep -q "\<$your_package_name\>"
выходит с 0, если он присутствует, с 1, если нет.
Бонус: эффективная проверка для нескольких пакетов, перечисленных в файле "packages_we_want", по одному на строку, отсортированных с помощью
sort
:apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want
перечисляет все пакеты, которые вы хотите, но не существует в репозиториях.apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want
перечисляет все пакеты, которые вы хотите и существуют в репозиториях.источник