![DPkg::Pre-Invoke 스크립트에서 현재 apt 명령을 호출하는 방법은 무엇입니까?](https://linux55.com/image/222702/DPkg%3A%3APre-Invoke%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%ED%98%84%EC%9E%AC%20apt%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%ED%98%B8%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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}")"