dpkg-query
就像在您的链接文章中一样,似乎是最正确的工具,除了在这种脚本上下文中使用可用的Python库直接绑定到APT系统之外。
与dpkg-query
:
dpkg-query -Wf'${db:Status-abbrev}' package-name 2>/dev/null | grep -q '^i'
0
如果安装了软件包,将返回true(在shell脚本中为退出状态1
),否则为false(退出状态)。
-W
表示“显示”(dpkg-query
必须执行请求的操作)。
-f
更改输出格式。
db:Status-abbrev
是包装状态的简称。
2>/dev/null
沉默dpkg-query
,如果一个无效的包名给出。如何处理此问题可能视情况而定。
grep -q
如果存在匹配项,则返回true,否则返回false。
如果经常使用,可以将其设为简单的功能:
#!/bin/sh
debInst() {
dpkg-query -Wf'${db:Status-abbrev}' "$1" 2>/dev/null | grep -q '^i'
}
if debInst "$1"; then
printf 'Why yes, the package %s _is_ installed!\n' "$1"
else
printf 'I regret to inform you that the package %s is not currently installed.\n' "$1"
fi
或者只是
#!/bin/sh
if dpkg-query -Wf'${db:Status-abbrev}' "$1" 2>/dev/null | grep -q '^i'; then
printf 'Why yes, the package "%s" _is_ installed!\n' "$1"
else
printf 'I regret to inform you that the package "%s" is not currently installed.\n' "$1"
fi
dpkg-query -l "$package" | grep -q ^.i
通常就足够了(并且更容易记住)。