Eu posso configurar trap
em scripts bash, mas não funções bash.
Por exemplo, source
o código abaixo e execute f
, agora tente Ctrl+ C, não foi preso!
Como configurar trap
nas funções do 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
no final do seu código e remover o espaço dof ()
.Respostas:
Isso
bash
ocorre porque ele envia o SIGINT ao processo em primeiro plano, em vez de para (que está executando o script). Se você quiser fazer isso, torne a função assíncrona e usewait
(que atuará como esperado e usar a interceptação).fonte
f
está em um canoecho 123 | f
, então não está preso?(command | command) &
Protip: envie um QUIT ao processo de primeiro plano com Ctrl- \quando Ctrl- C, - Z, - Dnão está funcionando.
Limpar armadilhas no final da execução com
trap - list of signals here
Diversão em um sistema que não é de produção: Tente configurar uma interceptação para todos os sinais sensíveis (por exemplo, não KILL).
kill -l
(não é um L minúsculo, não é o número 1 ou tubo |)fonte
Eu acho que você deve tornar a função global
fonte
INT
eSIGINT
são sinônimos - não fará diferença.