Перехват Ctrl-C скрипта внутри скрипта - PullRequest
0 голосов
/ 18 октября 2019

Я хочу написать некий макрос-скрипт. В этом сценарии я вызываю сценарий bash, к которому у меня нет доступа, который должен быть уничтожен с помощью ctrl-c. Теперь я хочу выполнить некоторую очистку в моем сценарии после завершения вызванного сценария.

Как я могу поймать Ctrl-C вложенного скрипта?

Редактировать: Вот так я ловлю Ctrl-C в не вложенном скрипте

# trap ctrl-c and call ctrl_c()
trap ctrl_c INT
function ctrl_c() {
    echo "** Trapped CTRL-C"
}

1 Ответ

0 голосов
/ 18 октября 2019

Терминология: я использую PARENT для родительского сценария, CHILD для дочернего сценария.

Если у вас нет доступа (я полагаю, вы не можете изменить) сценарий CHILD, выне сможет перехватить сигнал от его имени, даже если он является родительским.

Однако, поскольку процесс PARENT может проверять состояние выхода CHILD, вы можете обнаружить выход по сигналу INT, предполагая, что CHILD используетобработка по умолчанию CTRL / C.

In Parent:

# Needed to prevent the parent from aborting on INT
trap 'echo "Got Signal"' INT
run-child-command ; X=$?
if [ "$(kill -l $X)" = INT ] ; then
   echo "Child killed with INT"
   echo "Cleanup ..."
   ...
fi
# Restore origianl INT signal, if needed
trap - int
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...