Я могу настроить trap
в скриптах bash, но не в функциях bash.
Например, source
код ниже и запустите f
, теперь попробуйте Ctrl+ C, он не был пойман в ловушку!
Как настроить trap
функции Bash?
4 trap ctrl_c INT
5
6 ctrl_c () {
7 echo "** Trapped CTRL-C"
8 }
9
10
11 f () {
12 for i in `seq 1 100`; do
13 sleep 1
14 echo -n "."
15 done
16 }
f
в конце своего кода и удалив пробел изf ()
.Ответы:
Это потому, что он отправляет SIGINT процессу на переднем плане вместо to
bash
(который выполняет скрипт). Если вы хотите сделать это, сделайте функцию асинхронной, а затем используйте ееwait
(которая будет действовать, как ожидается, и использовать ловушку).источник
f
в трубеecho 123 | f
, то это не ловушка?(command | command) &
Protip: Отправить процесс переднего плана ВЫЙТИ с Ctrl- \при Ctrl- C, - Z, - Dне работает.
Очистить ловушки в конце выполнения с
trap - list of signals here
Удовольствие от непроизводственной системы: попробуйте установить ловушку для всех чувствительных сигналов (например, не KILL).
kill -l
(не это строчные буквы L, а не число 1 или труба |)источник
Я думаю, вы должны сделать функцию глобальной
источник
INT
иSIGINT
являются синонимами - это не будет иметь никакого значения.