Назад | Перейти на главную страницу

Ctrl-C в сценариях bash

Как мне реализовать 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