检查是否安装了软件包,如果不是,则安装它

我正在研究Ubuntu系统,目前这是我正在做的事情:

if ! which command > /dev/null; then
   echo -e "Command not found! Install? (y/n) c"
   read
   if "$REPLY" = "y"; then
      sudo apt-get install command
   fi
fi

这是大多数人会做的吗? 还是有更优雅的解决方案?


要检查是否packagename安装,输入:

dpkg -s <packagename>

你也可以使用dpkg-query来实现你的目的,并且可以接受通配符。

dpkg-query -l <packagename>

要找到哪个包拥有该command ,请尝试:

dpkg -S `which <command>`

有关更多详细信息,请参阅文章查找软件包是否安装在Linux和dpkg备忘单中。


为了更清楚一点,下面是一些bash脚本,用于检查包并根据需要安装它。 当然,您可以在发现软件包丢失时做其他事情,例如仅仅使用错误代码退出。

PKG_OK=$(dpkg-query -W --showformat='${Status}n' the.package.name|grep "install ok installed")
echo Checking for somelib: $PKG_OK
if [ "" == "$PKG_OK" ]; then
  echo "No somelib. Setting up somelib."
  sudo apt-get --force-yes --yes install the.package.name
fi

如果脚本在GUI中运行(例如,它是Nautilus脚本),则可能需要用'gksudo'替换'sudo'调用。


'one'liner返回1(已安装)或0(未安装)'nano'包装。

$(dpkg-query -W -f='${Status}' nano 2>/dev/null | grep -c "ok installed")

即使软件包不存在/不可用。

下面的例子安装'nano'包,如果它没有安装。

if [ $(dpkg-query -W -f='${Status}' nano 2>/dev/null | grep -c "ok installed") -eq 0 ];
then
  apt-get install nano;
fi
链接地址: http://www.djcxy.com/p/57053.html

上一篇: Check if a package is installed and then install it if it's not

下一篇: How to check if Docker is installed in a Unix shell script?