这个问题解释了如何查明给定的 Debian 软件包是否已安装,但在通过apt-get
.
例如,如果我尝试apt-get install libncurses-dev
, apt-get 会回复:
Note, selecting 'libncurses5-dev' instead of 'libncurses-dev'
然后它会安装该软件包(libncurses5-dev
),这对我来说没问题。
但是如果我想编写一个脚本来检测该软件包是否已经安装怎么办?
dpkg -s libncurses-dev
回复说该软件包未安装,这确实是正确的,因为它libncurses5-dev
已安装。但我希望我的脚本能够检测到,在这种情况下,它不再需要安装libncurses-dev
.
我找不到apt-get
检查给定包是否存在的选项或其提供商之一已经安装,这样我的脚本在检查libncurses-dev
以及libncurses5-dev
.
答案1
如果您想编写一个脚本来检查软件包libncurses-dev
或其别名是否已安装,请考虑以下程序流程:
- 在本例中,检查是否已
dpkg
使用确切名称安装了软件包。libncurses-dev
如果以上计算结果不为 true,则
apt
使用非别名名称搜索您要查找的包:$ apt-cache search libncurses-dev libncurses5-dev - developer's libraries for ncurses
apt-cache search
如果包有“别名”,似乎会返回“别名”。
- 如果 #1 计算结果为 false 并且 #2 返回别名,只需获取包的别名并再次尝试 #1。
再次检查dpkg
包的别名,在本例中为libncurses5-dev
.如果dpkg
没有通过别名找到该包(实际上是被取代的包),则不得安装它。
答案2
这看起来像是一份工作资质搜索。
$ aptitude -F %p search '~Plibncurses-dev'
libncurses5-dev
libncurses5-dev:i386
$ aptitude -F %p search '~Plibncurses-dev ~rnative'
libncurses5-dev
$ aptitude -F %p search '~Plibncurses-dev ~rnative ~i'
libncurses5-dev
libncurses5-dev
如果没有安装,最后一个将不会打印任何内容。