어떤 신호를 포착하여 스크립트를 종료하는 다음 트랩이 있다고 가정해 보겠습니다.
#!/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
# […]