Puedo configurar trap
en scripts bash pero no en funciones bash.
Por ejemplo, source
el código a continuación y ejecutar f
, ahora prueba Ctrl+ C, no ha sido atrapado
¿Cómo configurar trap
en funciones 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
al final de su código y eliminar el espacio delf ()
.Respuestas:
Esto se debe a que envía SIGINT al proceso en primer plano en lugar de a
bash
(que ejecuta el script). Si desea hacer esto, haga que la función sea asíncrona y luego usewait
(que actuará como se esperaba y usará la trampa).fuente
f
está en una tuberíaecho 123 | f
, entonces no está atrapando?(command | command) &
Protip: envíe el proceso en primer plano un QUIT con Ctrl- \cuando Ctrl- C, - Z, - Dno funcionan.
Elimina trampas al final de la ejecución con
trap - list of signals here
Diversión en un sistema que no es de producción: intente establecer una trampa para todas las señales sensibles (por ejemplo, no KILL).
kill -l
(no es una L minúscula, no un número 1 o una tubería |)fuente
Creo que deberías hacer que la función sea global
fuente
INT
ySIGINT
son sinónimos, no habrá diferencia.