트랩의 출력 신호로 인해 트랩이 호출됩니까?

트랩의 출력 신호로 인해 트랩이 호출됩니까?

어떤 신호를 포착하여 스크립트를 종료하는 다음 트랩이 있다고 가정해 보겠습니다.

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

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

이제 트랩을 호출하고 출력하는 신호를 어떻게 얻을 수 있습니까? 결과는 다음과 같이 가상이어야 합니다 $SIGNAL.

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

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

쉘 특정 솔루션(bash)은 괜찮지만 POSIX 호환 솔루션을 선호합니다.

답변1

연산 man 1p trap( 의 첫 번째 인수 trap)은 수신된 신호에 대한 추가 정보 없이 단순히 평가하므로 이식 가능한 솔루션은 각 신호에 대해 서로 다른 핸들러를 설치하는 것일 수 있습니다.

#!/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
# […]

관련 정보