如何在 apt hooks 中获取包名称?

如何在 apt hooks 中获取包名称?

我在中创建了以下钩子/etc/apt/apt.conf.d

Dpkg::Pre-Invoke {"/etc/apt/log.sh";};

内容/etc/apt/log.sh如下:

#!/bin/bash

echo "$@" | tee -a /etc/apt/my.log

当我(重新)安装某些包时,我希望将该包名称和命令作为参数,但没有将此类参数传递给挂钩脚本。

如何在挂钩脚本中获取已安装的软件包名称?

答案1

DPkg::Pre-Invoke是一个非常通用的钩子,与特定的包操作无关;因此,它没有提供获取正在操作的包列表的方法。

要获取已安装软件包的列表,您应该使用DPkg::Pre-Install-Pkg。有一些文档apt联机帮助页中,但您可能需要进行试验。默认情况下,此挂钩运行的命令会在其标准输入上接收包列表,根据所使用的协议,详细程度会有所不同。请注意,删除包时也会调用此挂钩,因此您的处理程序必须检查与每个包对应的操作。

从文档中看,设置协议并不明显;在 中,替换为您的命令。例如,参见示例,其中添加了DPkg::Tools::options::cmd::Versioncmdapt-listbugs

DPkg::Tools::Options::/usr/sbin/apt-listbugs::Version "3";

指定协议的版本 3。

穆鲁写了一个全面的例子在 AskUbuntu 上这应该会让事情变得更清楚。

相关内容