В настоящее время:
bash
ожидает sleep
для выхода bash
и sleep
получения sigint sleep
умирает bash
заканчивает ожидание и запускает ловушку
Это предотвращает ваше желаемое поведение, потому что:
- Вы не хотели
sleep
для d ie - Вы не хотели, чтобы
bash
ждал завершения команды, прежде чем запускать ловушку
Чтобы исправить это, вы можете sleep
проигнорировать знак и bash
запустите wait
в al oop, чтобы основной сценарий получил управление после ctrl- c, но все еще ожидает завершения sleep
:
trap 'echo "No thanks"' INT
echo "Let me just chill for $1 sec"
# Run sleep in the background
sleep "$1" &
# Loop until we've successfully waited for all processes
until wait; do true; done
echo "All finished"