Bash 스크립트 끝의 종료 코드

Bash 스크립트 끝의 종료 코드

Bash 스크립트 끝에 있는 종료 코드의 의미가 혼란스럽습니다. 종료 코드 0은 성공적으로 완료되었음을 의미하며 더 많은 종료 코드 번호가 있습니다(제 기억이 맞다면 127인가요?).

내 질문은 스크립트 끝에 종료 코드 0이 표시되면 스크립트가 실패하더라도 종료 코드가 0이 되도록 강제하는 것입니까, 아니면 다른 의미가 있습니까?

답변1

내장 명령은 exit쉘을 종료합니다(배시 참조):

exit [n]
쉘을 종료하고 상태 n을 쉘의 부모에게 반환합니다. n이 생략되면 종료 상태는 마지막으로 실행된 명령의 상태입니다. EXIT의 모든 트랩은 쉘이 종료되기 전에 실행됩니다.

파일 끝까지 실행하면 마지막 명령의 반환 코드와 함께 종료되므로 예, final은 exit 0이전 명령의 종료 상태에 관계없이 성공 상태로 스크립트를 종료합니다. (즉, 스크립트가 끝에 도달했다고 가정합니다 exit.) 스크립트 끝에서 true또는 를 사용하여 :종료 코드 0을 얻을 수도 있습니다.

exit물론 더 일반적으로는 from 내부에서 스크립트를 중간에 종료합니다 if.

이는 1( $?이전 명령에서 반환된 종료 코드 포함)을 인쇄해야 합니다.

sh -c "false" ; echo $?
sh -c "false; exit" ; echo $?

0이 인쇄되어야 하지만:

sh -c "false; exit 0" ; echo $?

exit스크립트가 실행되는 명령 중 일부는 실패할 가능성이 높지만 스크립트 자체는 성공할 가능성이 높기 때문에 실행 시 스크립트가 "실패"한다는 개념이 의미가 있는지 잘 모르겠습니다 . 무엇이 성공하고 무엇이 실패하는지 결정하는 것은 각본가의 몫입니다.

또한 종료 코드의 표준 범위는 0..255입니다. 셸은 127 이상의 코드를 사용하여 프로세스가 신호에 의해 종료되었음을 나타내지만 일반적인 방법으로 반환될 수 있습니다. 시스템 wait호출은 실제로 더 넓은 값을 반환하고 나머지에는 운영 체제에서 설정한 상태 비트가 포함됩니다.

답변2

0은 성공을 나타내고, 양의 정수는 실패를 나타냅니다. 255개의 서로 다른 오류 코드가 있지만 126 이상의 값은 프로그램이 시작되지 않았거나(126 또는 127) 신호에 의해 종료되었음을 나타내기 위해 예약되어 있습니다(129 이상). 바라보다프로세스 종료 시 기본 종료 코드는 무엇입니까?그리고Bash 함수/스크립트에서 어떤 반환/종료 값을 사용할 수 있나요?더 많은 정보를 알고 싶습니다.

쉘 스크립트의 종료 상태는 스크립트에 의해 실행된 마지막 명령의 종료 상태입니다. 예를 들어

#!/bin/sh
somecommand

종료 상태를 반환하고 somecommand, 반면

#!/bin/sh
somecommand
exit 0

무엇 somecommand이든 반환되면 0이 반환됩니다. 두 번째 스크립트는 다음과 같이 작성할 수도 있습니다.

#!/bin/sh
somecommand
true

exit 0스크립트 끝에 배치한다고 해서 반드시 0이 반환되는 것은 아닙니다. 이렇게 하면 스크립트 끝에 도달하면 0이 반환됩니다. 예를 들어 다음 스크립트는 항상 3을 반환합니다.

#!/bin/sh
exit 3
exit 0

구문 오류에 대한 메시지를 표시하는 것 외에도 다음 스크립트는 항상 오류 코드를 반환합니다.

#!/bin/sh
}
exit 0

다음 스크립트는 첫 번째 인수에 따라 1 또는 0을 반환합니다.

#!/bin/sh
if [ "$1" = "foo" ]; then
  exit 1
fi
exit 0

somecommand실패하면 set -e스크립트가 종료되므로 다음 스크립트에서 반환된 상태입니다 .somecommand

#!/bin/sh
set -e
somecommand
exit 0

관련 정보