如何忽略dpkg-query未找到包时的警告输出?
解决dpkg-query查询无匹配时静默无输出的问题
没问题,我刚好在脚本里处理过这个需求,给你两个实用的方案:
方案1:直接通过参数+重定向实现(最简洁)
用dpkg-query的格式化输出参数配合错误重定向,就能精准只返回包名,无匹配时完全静默:
dpkg-query -W -f='${Package}\n' 你要查的包名 2>/dev/null
参数解释:
-W:查询系统中已安装的软件包(如果要查所有包包括未安装的可以用-l,但脚本里一般查已安装的场景更多)-f='${Package}\n':指定输出格式仅打印包名,每个包名后换行,避免多余冗余信息2>/dev/null:把dpkg-query找不到包时输出的错误警告(stderr)重定向到/dev/null,彻底屏蔽无关输出
如果用通配符匹配多个包(比如dpkg-query -W -f='${Package}\n' firefox* 2>/dev/null),会输出所有匹配的包名,无匹配时同样无输出,完美适配脚本场景。
方案2:先检查存在性再输出(更严谨)
如果需要在脚本里搭配更多逻辑判断,可以先静默检查包是否存在,确认存在后再输出包名:
if dpkg-query -W '你要查的包名' >/dev/null 2>&1; then dpkg-query -W -f='${Package}\n' '你要查的包名' fi
这里>/dev/null 2>&1是把所有输出(标准输出和错误输出)都屏蔽,只依赖命令的退出状态判断:如果包存在,dpkg-query返回0,进入if分支输出包名;不存在则返回非0,直接跳过输出,全程无额外警告干扰。
这两种方案都能解决你脚本里因为警告输出导致异常的问题,日常用第一种简洁版就完全够用啦~
内容的提问来源于stack exchange,提问作者answerSeeker
相关产品推荐
相关产品推荐

