http://linuxcommand.org/wss0160.php#trap 에서 trap
설명한 것과 같이 사용 하여 종료하기 전에 ctrl-c (또는 유사한) 및 정리를 잡으면 종료 코드가 변경됩니다.
이제 이것은 아마도 실제 세계에서 차이를 만들지 않을 것입니다 (예 : 종료 코드가 이식 가능하지 않고 프로세스가 종료 될 때 기본 종료 코드 에서 논의 된 것처럼 항상 명확하지는 않기 때문에 ) ? 실제로이를 방지하고 대신 중단 된 스크립트에 대한 기본 오류 코드를 반환 할 방법이 없습니까?
예 (bash에서 내 질문은 bash 특정으로 간주되어서는 안됩니다) :
#!/bin/bash
trap 'echo EXIT;' EXIT
read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _
trap 'echo SIGINT; exit 1;' INT
read -p 'If you ctrl-c me now my return code will be 1. ' _
산출:
$ ./test.sh # doing ctrl-c for 1st read
If you ctrl-c me now my return code will be the default for SIGTERM.
$ echo $?
130
$ ./test.sh # doing ctrl-c for 2nd read
If you ctrl-c me now my return code will be the default for SIGTERM.
If you ctrl-c me now my return code will be 1. SIGINT
EXIT
$ echo $?
1
(POSIX 준수를 위해 제거하도록 편집되었습니다.)
(대신 bash 스크립트로 다시 편집하면 내 질문은 쉘별로 다릅니다.)
휴대 할 수없는 "SIGINT"를 위해 휴대용 "INT"를 트랩에 사용하도록 편집했습니다.
쓸모없는 중괄호를 제거하고 잠재적 솔루션을 추가하도록 편집되었습니다.
최신 정보:
하드 코드 된 오류 코드로 종료하고 EXIT를 트랩하여 간단하게 해결했습니다. 오류 코드가 다르거 나 EXIT 트랩을 사용할 수 없지만 내 경우에는 충분하기 때문에 특정 시스템에서 문제가 될 수 있습니다.
trap cleanup EXIT
trap 'exit 129' HUP
trap 'exit 130' INT
trap 'exit 143' TERM
read -p
에는 현재 코 프로세스의 입력을 읽습니다.
read
현재 코 프로세스에서 읽 도록 지시trap cmd SIGINT
하고 표준에서 사용해야한다고 말하는 것처럼 작동하지 않습니다trap cmd INT
.