如何获取 DPkg::Pre-Invoke 脚本中调用的当前 apt 命令?

如何获取 DPkg::Pre-Invoke 脚本中调用的当前 apt 命令?

我知道我可以在执行DPkg::Pre-Invoke之前运行脚本/命令。apt

DPkg::Pre-Invoke { "/tmp/pre-invoke.sh"; };

在我的脚本中,我想获取apt已执行的完整命令。例如,如果我apt install funky然后在脚本中运行,我希望能够看到调用命令是apt install funky, 或install funky

这可能吗?

答案1

我找到了一种方法来获取我想要的信息,但我不喜欢它——它太老套了。我感觉有更好的方法。我只是分享这个以防其他人能告诉我更好的方法。

本质上,我沿着当前进程的进程树向上走,直到找到命令为 的进程apt

# we need to work up the process tree to find the apt command that triggered the call to this script
# get the initial PPID
PARENT_PID=${PPID}
# trim leading spacess
PARENT_PID="${PARENT_PID## }"

# if the command for this PPID is not apt
while [ "$(ps -ho comm "${PARENT_PID}")" != "apt" ] ; do
    # go up one level
    PARENT_PID=$(ps -ho ppid "${PARENT_PID}")
    PARENT_PID="${PARENT_PID## }"
done

APT_CMD="$(ps -ho args "${PARENT_PID}")"

相关内容