22

我需要检查已安装的软件包,如果未安装,请安装它们。

RHEL、CentOS、Fedora 的示例:

rpm -qa | grep glibc-static
glibc-static-2.12-1.80.el6_3.5.i686

如何在 BASH 中进行检查?

我会做类似的事情吗?

if [ "$(rpm -qa | grep glibc-static)" != "" ] ; then

我需要为其他发行版使用什么?容易得到?

4

4 回答 4

50

试试下面的代码:

if ! rpm -qa | grep -qw glibc-static; then
    yum install glibc-static
fi

或更短:

rpm -qa | grep -qw glibc-static || yum install glibc-static

对于Debian喜欢:

dpkg -l | grep -qw package || apt-get install package

对于archlinux:

pacman -Qq | grep -qw package || pacman -S package
于 2012-10-09T18:31:16.883 回答
1

基于@GillesQuenot 和@Kidbulra 的回答,这是一个如何循环多个包并在缺少时安装的示例:

packageList="git gcc python-devel"

for packageName in $packageList; do
  rpm --quiet --query $packageName || sudo yum install -y $packageName
done
于 2018-03-08T12:38:25.847 回答
0
if [ $(yum list installed | cut -f1 -d" " | grep --extended '^full name of package being checked$' | wc -l) -eq 1 ]; then
  echo "installed";
else
  echo "missing"
fi

我使用它是因为它返回已安装/丢失而不依赖于错误状态(这可能会导致脚本出现问题,通过

set -o errexit

例如)

于 2018-05-28T23:20:25.347 回答
0

如果您对下载的 RPM 执行此操作。你可以做到。

rpm -Uvh package-name-version-tag.rpm
于 2018-09-25T21:11:09.000 回答