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}")"