我知道我可以在执行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}")"