bash 스크립트 끝에서 종료 코드


22

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

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


2
스크립트가로 끝나는 경우 스크립트 exit 0내에서 수행되는 작업에 관계없이 종료 코드 0으로 종료됩니다.
Hatclock

@Hatclock 왜 당신의 답변을 완전한 서약으로 게시하지 않았습니까? 코멘트로서 나는 그것을 표시 할 수 없다. 나는 당신이 대답하기 위해 가짜 인터넷 포인트를 얻지 못한다고 생각한다. (오른쪽?) 단지 생각 ... (빠른 답장을위한 구절)
Busted

1
나는 전화의 기차역에 있는데 전화를 너무 많이 입력하는 것을 좋아하지 않습니다. ilkkachu는 좋은 답변을 가지고있는 것 같습니다!
Hatclock


2
@Hatclock 아니, 전혀. 스크립트가로 끝나면 exit 0마지막 명령이 실행 된 경우에만 코드 0으로 종료됩니다. exit 0스크립트가 끝날 때의 유일한 영향은 이전 명령의 상태 대신 0을 반환하는 것입니다.
Gilles 'SO- 악 그만

답변:


22

내장 명령 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시스템 호출 실제로 오퍼레이팅 시스템에 의해 설정된 나머지 함유 상태 비트와 넓은 값을 반환한다.


멋지다, 나는 8 비트 종료 코드 번호 매김에 대해 몰랐다. 감사!
파열

프로세스가 종료되면 종료 코드> 127로 종료되지 않습니다.이 경우 일부 쉘 $?은 128 + signum으로 설정 됩니다. 프로세스가 종료 될 때 기본 종료 코드를 참조하십시오 . 자세한 내용은.
Stéphane Chazelas

exit 0종료가 실행되면 0 만 반환합니다. (다른 경로로 나갈 수 있습니다).
ctrl-alt-delor

18

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.