명령줄에서 신호를 잡는 방법은 무엇입니까?

명령줄에서 신호를 잡는 방법은 무엇입니까?

나는 이것을 묻는다질문. SIGPIPE답변에 설명된 대로 명령 실행을 중지하는 신호를 생성합니다.

하지만 어떻게 이 신호를 포착하고 명령을 정상적으로 종료할 수 있을까요? 파이프가 끊어졌다는 오류와 함께 명령이 종료됩니다.

[오류] [Errno 32] 파이프 파손

오류 메시지 표시 여부

답변1

AFAIK, 이러한 신호를 "잡는" 유일한 방법은 이 trap명령을 사용하는 것입니다. 특정 신호가 수신될 때 실행할 작업(함수 또는 명령)을 구체적으로 설정합니다.

#!/bin/bash


cleanup () {
    ...do cleanup tasks & exit...
}

trap "cleanup" SIGPIPE

### MAIN part of script

이 방법은 한 줄 문이나 스크립트에서 쉽게 사용할 수 있습니다. "함수"라고 불리는 것은 보기 cleanup만 해도 쉽게 잘 만들어진 한 줄짜리가 될 수 있습니다 SIGPIPE.

$ trap "cmd1; cmd2; cmd3;" SIGPIPE

다음에 연결된 원래 질문을 되돌아보면:무한 루프 종료, 이 방법이 거기에도 나타나는 것을 알 수 있습니다.

관련 정보