Как мне реализовать ctrl+c обработка в сценариях bash, чтобы сценарий был прерван, а также текущая запущенная команда, запущенная сценарием?
(Представьте, что есть сценарий, который выполняет какую-то длительную команду. Пользователь нажимает ctrl+c и прерывает команду, но сценарий продолжает работу.) Мне нужно, чтобы они оба были убиты.
Вы делаете это, создавая подпрограмму, которую хотите вызвать при получении SIGINT, и вам нужно запустить trap 'subroutinename' INT
.
Пример:
#!/bin/bash
int_handler()
{
echo "Interrupted."
# Kill the parent process of the script.
kill $PPID
exit 1
}
trap 'int_handler' INT
while true; do
sleep 1
echo "I'm still alive!"
done
# We never reach this part.
exit 0