我正在编写一个脚本来打印未安装的软件包列表。
#!/bin/bash
declare -a LIST_OF_PACKAGES=("php5" "nginx")
for i in "${LIST_OF_PACKAGES[@]}"
do
PACKAGE_STATUS=`dpkg-query -W -f='${Status} ${Version}\n' $i | grep --line-buffered -v "install ok"`
ECHO=`echo $i * $PACKAGE_STATUS * $i`
done
我试图将以下几行包含在 for 循环中:
echo $ECHO | awk -F "*" '{print $1}' | sed '/^\s*$/d'
基本上,我试图 grep 未安装的软件包。所以我根据 "*" 裁剪列表。
电流输出:
unknown ok not-installed
所需输出:
nginx * unknown ok not-installed
我想忽略已安装的软件包。
答案1
您可以直接使用 aptitude 列出未安装的软件包:
aptitude search "!(~i)"
您还可以使用更明确但等效的形式:
aptitude search "?not(?installed)"
如果只想打印包名称,可以添加格式选项:
aptitude -F "%p" search "?not(?installed)"
阅读来自 aptitude 的搜索词参考,很有用。