Sinal de saída na armadilha que causou a armadilha sendo chamada?

2

Digamos que eu tenha a seguinte armadilha, que captura alguns sinais, que terminam o script:

#!/bin/sh
trapterm() {
    echo "Process (PID: $$) interrupted." >&2
    exit 2
}

# add trap to catch terminating signals
trap trapterm INT TERM
# […]

Agora, como posso obter o sinal, o que fez com que a armadilha fosse chamada e gerá-la? O resultado deve funcionar assim fictício $SIGNAL :

#!/bin/sh
trapterm() {
    echo "Process (PID: $$) interrupted by signal $SIGNAL." >&2
    exit 2
}

# add trap to catch terminating signals
trap trapterm INT TERM
# […]

Soluções específicas de shell (bash) estão bem, mas eu prefiro as compatíveis com POSIX.

    
por rugk 15.07.2017 / 13:16

1 resposta

3

Como man 1p trap afirma que a ação (o primeiro argumento para trap ) é simplesmente avaliada sem mais informações sobre o sinal recebido, uma solução portátil pode ser instalar diferentes manipuladores para cada sinal:

#!/bin/sh
trap_sig() {
    echo "Process (PID: $$) interrupted by signal $1." >&2
    exit 2
}

# add trap to catch terminating signals
trap 'trap_sig INT' INT
trap 'trap_sig TERM' TERM
# […]
    
por 15.07.2017 / 13:31