bash 스크립트 끝에서 종료 코드 것을 알고

bash 스크립트 끝에서 종료 코드의 의미에 대해 혼란 스럽습니다. 종료 코드 0은 성공적으로 완료되었음을 의미하며 종료 코드 번호가 더 많다는 것을 알고 있습니다 (실수하지 않으면 127입니까?)

내 질문은 스크립트 끝에서 종료 코드 0을 볼 때에 관한 것입니다. 스크립트가 실패했거나 다른 의미가 있더라도 종료 코드를 0으로 강제 실행합니까?



답변

내장 명령 exitBash의 참조 에서 쉘을 종료합니다 .

exit [n]
쉘을 종료하고 n의 상태를 쉘의 상위로 리턴하십시오. n을 생략하면 종료 상태는 마지막으로 실행 된 명령의 종료 상태입니다. EXIT의 모든 트랩은 쉘이 종료되기 전에 실행됩니다.

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

물론 더 자주 당신 은 중간에서 스크립트를 끝내기 위해 exit내부에서 사용할 것 if입니다.

이들은 1을 인쇄해야 $?합니다 (이전 명령에서 리턴 한 종료 코드가 포함되어 있음).

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

이것은 0을 인쇄해야하지만 :

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

스크립트를 실행할 때 “실패”스크립트 개념이 의미가 있는지 확실하지 않습니다. 스크립트에서 실행 한 exit일부 명령이 실패 할 수는 있지만 스크립트 자체는 성공할 수 있습니다. 성공 여부를 결정하는 것은 스크립트 작성자에게 달려 있습니다.

또한 종료 코드의 표준 범위는 0..255입니다. 127 이상의 코드는 셸에서 신호로 종료 된 프로세스를 나타내는 데 사용되지만 일반적인 방식으로 반환 될 수 있습니다. wait시스템 호출 실제로 오퍼레이팅 시스템에 의해 설정된 나머지 함유 상태 비트와 넓은 값을 반환한다.


답변

0은 성공을, 양의 정수는 실패를 의미합니다. 255 개의 서로 다른 오류 코드가 있지만 값 126 이상은 프로그램을 시작할 수 없거나 (126 또는 127) 신호 (129 이상)에 의해 종료되었음을 나타냅니다. 프로세스가 종료 될 때 기본 종료 코드를 참조하십시오 . 그리고 나는 bash는 기능 / 스크립트에서 무엇 리턴 / 종료 값을 사용할 수 있습니까? 자세한 내용은.

쉘 스크립트의 종료 상태는 스크립트가 마지막으로 실행 한 명령의 종료 상태입니다. 예를 들어

#!/bin/sh
somecommand

의 종료 상태를 반환하는 somecommand반면

#!/bin/sh
somecommand
exit 0

반환 된 내용에 관계없이 0을 somecommand반환합니다. 이 두 번째 스크립트도 쓸 수 있습니다

#!/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 -esomecommand

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