Bash - 如果 apt-get/dpkg 正在运行,如何检查软件包是否可以安装?

use*_*464 7 dpkg apt-get

在 bash 脚本中我想安装一个包。在明智地这样做之前,我需要检查是否没有其他实例apt-getdpkg已经在工作。如果是这样的话,就会apt-get失败,因为它已经锁定了。

检查/var/lib/dpkg/lock和是否/var/lib/apt/lists/lock存在就足够了,如果两者都不存在,安装是安全的吗?

dio*_*ovk 2

这取决于您想要如何处理 apt-get 错误。根据您的需要检查/var/lib/dpkg/lock,这/var/lib/apt/lists/lock很好,但如果您想格外小心,您可以进行模拟并检查返回代码,如下所示:

if sudo apt-get --simulate install packageThatDoesntExist      
then echo "we're good"
else echo "oops, something happened"
fi
Run Code Online (Sandbox Code Playgroud)

例如:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package packageThatDoesntExist
oops, something happened
Run Code Online (Sandbox Code Playgroud)

编辑:--simulate不会检查锁,因此您可能需要在那里进行额外的检查。sudo如果您想单独检查 sudo,您可能还需要删除。