我在中创建了以下钩子/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::Version
cmd
apt-listbugs
DPkg::Tools::Options::/usr/sbin/apt-listbugs::Version "3";
指定协议的版本 3。
穆鲁写了一个全面的例子在 AskUbuntu 上这应该会让事情变得更清楚。