与用户命令“apt list --installed”等效的脚本是什么?

与用户命令“apt list --installed”等效的脚本是什么?

我可以在我的 Ubuntu 16.04(xenial)安装的命令行上很好地执行这些命令:

apt list --installed
apt list --installed | grep grep

Stdout 接收结果以及以下行:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

当将其放入脚本中时,我假设我必须使用“apt-get”或“apt-cache”之类的东西 - 但尝试后发现它们都不支持我给出的选项。相反,我得到的是:

E: Command line option --installed is not understood in combination with the other options

删除“--installed”部分后,我得到了这个:

E: Invalid operation list

应该使用哪种 apt 命令行工具变体来以稳定的方式执行此查询?(我绝对希望有一种不会发出那些“警告:”行的工具变体。)

答案1

资质具有自定义格式的包搜索。

使用 aptitude 搜索软件包时,搜索词用于限制搜索,在本例中为“已安装”包。然后使用不区分大小写的模式执行常用表达(通过在模式中添加“^”“$”锚点,可以匹配精确的包名称)。使用-F选项,可以使用以下方式形成自定义的输出格式字符串:%转义

例子:

$ aptitude search '?narrow(?installed, "^grep$")' -F '%p (%v)' -q=2 --disable-columns
  grep (3.3-1)

(包含简短搜索词的脚本示例)

#!/bin/bash

read -r package_name package_version < <(aptitude search '~i^grep$' -F '%p %v' -q=2 --disable-columns 2>&-)

echo $package_name
echo $package_version

exit 0

搜索词参考:
  ?narrow() - 选择单个版本与过滤器和模式匹配的软件包。
  ?installed - 选择已安装的软件包。

转义占位符:
  %p - 输出包的名称。
  %v - 输出包的当前安装版本。

能力选项:
  -F - 指定显示输出的格式。
  -q - 禁止所有进度指示器。多次提供可使输出更安静。--
  disable-columns - 此选项使搜索输出其结果而不带任何特殊格式。

获取套餐选择软件包

$ dpkg --get-selections grep
  grep                                            install

或者

$ dpkg -l grep
  ii  grep           3.3-1        amd64        GNU grep, egrep and fgrep

(脚本示例)

#!/bin/bash

if [[ $(dpkg --get-selections grep 2>&-) =~ .+[[:space:]]+install$ ]]; then
  echo Installed
fi

或者

#!/bin/bash

if (( $(dpkg -l grep 2>&- | grep -c ^ii) == 1 )); then
  echo Installed
fi

使用以下方式获取包裹状态dpkg-查询

$ dpkg-query --showformat='${Package}\t${Version} (${db:Status-Status})\n' --show grep
  grep    3.3-1 (installed)

(脚本示例)

#!/bin/bash

if [[ $(dpkg-query --showformat='${db:Status-Status}' --show grep 2>&-) == 'installed' ]]; then
  echo Installed
fi

相关内容