
예를 들어 우리가 사용할 수 있는 반환 값이 무엇인지 알고 싶습니다. 서명?
전.:
$sleep 10
$#hit ctrl+c
$echo $?
130
return 130
그래서 나는 다음 과 같은 것을 사용해서는 안된다는 것을 알고 있습니다exit 130
그래서 이것은 오해의 소지가 있습니다:
$function FUNC(){ return 130; };FUNC;echo $?
130
답변1
프로세스의 종료 상태는 값으로 인코딩됩니다.0에서 255 사이, 이것이 종료 코드로 사용할 수 있는 전부입니다. 해당 범위 밖의 값을 전달하면 대부분의 쉘은 나머지 모듈로 256을 사용합니다. 일부 쉘은 함수에 대해 더 넓은 범위의 정수 값을 허용합니다.
종료 코드에 대한 유일한 규칙은 다음과 같습니다.0은 성공을 의미하고 다른 값은 실패를 의미합니다.. 이 규칙은 유닉스를 넘어서는 것입니다. 이는 다른 운영 체제(DOS, Windows 및 종료 코드 개념이 있지만 VMS는 다르게 작동하는 많은 임베디드 시스템 포함)에서도 일반적인 규칙입니다. 유닉스 시스템에서는 쉘의 부울 구문( if
, while
, &&
, ||
, !
, set -e
, …), into make
및 모든 표준 유틸리티에 구워집니다 . POSIX C 프로그램에서는EXIT_SUCCESS
은 0이고 EXIT_FAILURE
0이 아닌 값(보통 1)입니다.
실패에 대한 종료 코드 선택에 관한 규칙(사실상 또는 법적)은 없습니다. 소수의 POSIX 유틸리티만이 특정 실패 상태 코드를 요구합니다.
- 쉘
!
연산자는 피연산자가 0을 반환하면 1을 반환합니다.&&
and||
연산자는 마지막 명령의 상태를 전달합니다. cmp
그리고diff
다른 파일의 경우 1을 반환하고 오류 조건의 경우 ≥2를 반환합니다.expr
표현식이 0 또는 Null로 평가되면 1을 반환하고, 잘못된 표현식이면 2를, 기타 오류이면 ≥3을 반환합니다.grep
"찾을 수 없음"의 경우 1을 반환하고 오류 조건의 경우 ≥2를 반환합니다. 많은 검색 명령이 이 명령을 따릅니다(그러나find
일치하는 파일이 없으면 0을 반환하는 는 아님).mesg
예인 경우 0, 아니오인 경우 1, 오류인 경우 ≥2를 반환합니다.patch
덩어리가 거부된 경우 1을 반환하고 다른 오류의 경우 ≥2를 반환합니다.sort -c
파일 데이터가 정렬되지 않은 경우 1을 반환하고 오류가 있는 경우 ≥2를 반환합니다.compress
그리고localedef
특정 오류에 대해 몇 가지 작은 값을 정의합니다.
값이 클수록 실패가 더 심해진다는 일반적이지만 보편적이지는 않은 생각이 있습니다. grep
(이 패턴이 존재합니까?) 및 (이 파일이 동일합니까?) 와 같은 부울 조건을 테스트하는 명령의 경우 diff
1은 "아니요"를 의미하고 값이 높을수록 오류를 나타냅니다. 게다가,126 이상의 값은 거의 사용되지 않습니다., 셸(및 POSIX 명령 command
, env
, nice
및 nohup
) 에 구워지기 때문입니다 time
.
- 126 및 127은 외부 명령 호출 실패를 나타냅니다.
- 128 이상의 값은
$?
신호에 의해 종료된 명령을 나타냅니다.
/usr/include/sysexits.h
의미와 함께 몇 가지 값을 나열하지만 이는 sendmail에서 가져온 것이며 이메일 전달과 관련 없는 프로그램 외부에서는 본 적이 없습니다.
요약하면, 성공하면 0을 반환하고, 실패하면 1 또는 2를 반환합니다. 실패 사례를 구별해야 하는 경우 1부터 시작하여 더 심각한 실패에 대한 값을 늘립니다.
답변2
종료 상태 규칙
기술적으로는 0에서 255 사이의 값을 사용할 수 있습니다. 그러나 사용할 수 있는 기존 규칙이 많이 있습니다.
- 종료 코드 1은 다음과 같습니다.일반적인 오류에 대한 catch-all.
- 종료 코드 64-78sysexits.h오류 클래스를 나타냅니다. 일반적으로 다음에서 찾을 수 있습니다./usr/include/sysexits.h, Debian/Ubuntu libc6-dev 패키지에 의해 설치됩니다.
- 종료 코드:오류 번호.h. 또한오류moreutils 패키지의 명령입니다. 내 시스템에서 실행하면
errno --list
현재 134개의 정의된 오류가 표시됩니다.
문서 및 디스플레이
일반적으로 스크립트 내에서 사용되는 종료 코드나 최소한 어떤 규칙을 따르고 있는지 문서화하는 것이 좋습니다. 종료하기 전에 다음과 같은 독특한 메시지를 표시하는 것도 유용할 수 있습니다.
# using sysexits.h
echo "EX_USAGE: invalid argument: $1" > /dev/stderr
exit 64
# using errno.h
echo "ENOENT: File not found: $file" > /dev/stderr
exit 2
답변3
다음을 제외하고 0에서 255 사이의 숫자를 사용할 수 있습니다.예약된 종료 코드(자세한 내용을 보려면 여기를 클릭하십시오.)