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