bash 스크립트 끝에있는 종료 코드의 의미가 혼란 스럽습니다. 종료 코드를 알고 있습니다. 0은 성공적으로 끝났음을 의미하며 더 많은 종료 코드 번호가 있음을 의미합니다 (오해하지 않은 경우 127).
내 질문은 스크립트 끝에서 종료 코드 0을 볼 때입니다. 스크립트가 실패했거나 다른 의미가 있더라도 종료 코드를 0으로 강제 실행합니까?
설명
답변
내장 명령 exit
는 셸을 종료합니다 ( Bash “s 참조 ) :
exit [n]
n 상태를 반환하여 셸을 종료합니다. n을 생략하면 종료 상태는 마지막으로 실행 된 명령의 상태입니다. EXIT의 모든 트랩은 쉘이 종료되기 전에 실행됩니다.
파일 끝까지 실행도 종료되고 마지막 명령의 반환 코드를 반환하므로 마지막 exit 0
는 종료 상태에 관계없이 스크립트를 성공 상태로 종료합니다. (즉, 스크립트가 마지막 exit
에 도달했다고 가정합니다.) 스크립트 끝에서 true
를 사용할 수도 있습니다. 또는 종료 코드 0을 가져옵니다.
물론 더 자주 iv id =”내부에서 exit
를 사용합니다. b24dfb915f “>
는 중간에 스크립트를 종료합니다.
1을 인쇄해야합니다 ($?
에는 이전 명령에서 반환 된 종료 코드가 포함됨). :
sh -c "false" ; echo $? sh -c "false; exit" ; echo $?
0이 인쇄되지만 :
sh -c "false; exit 0" ; echo $?
아니요 exit
를 실행할 때 스크립트 “실패”개념이 의미가 있는지 확인하십시오. 스크립트에 의해 실행 된 일부 명령은 실패 할 수 있지만 스크립트 자체는 성공할 수 있기 때문입니다. . 성공과 실패를 결정하는 것은 스크립트 작성자의 몫입니다.
또한 종료 코드의 표준 범위는 0..255입니다. 127 이상의 코드는 셸에서 신호에 의해 종료 된 프로세스를 나타내는 데 사용되지만 일반적인 방법으로 반환 될 수 있습니다. wait
시스템 호출은 실제로 더 넓은 값을 반환하며 나머지는 운영 체제에서 설정 한 상태 비트를 포함합니다.
설명
- 좋습니다. ' 8 비트 종료 코드 번호 매기기에 대해 몰랐습니다. 감사합니다!
- 프로세스가 종료되면 종료 코드 > 127과 함께 종료되지 않습니다. It ' 일부 셸은이 경우
$?
를 128 + signum으로 설정합니다. 자세한 내용은 프로세스 종료시 기본 종료 코드 를 참조하세요. -
exit 0
는 0, 종료가 실행 된 경우. (다른 경로로 종료 될 수 있습니다.)
답변
0은 성공을 의미하고 양의 정수는 실패를 의미합니다. 255 개의 서로 다른 오류 코드가 있지만 126 이상의 값은 프로그램을 시작할 수 없거나 (126 또는 127) 신호에 의해 종료되었음을 표시하기 위해 예약되어 있습니다 (129 이상). 프로세스 종료시 기본 종료 코드? 및 Bash 함수 / 스크립트에서 사용할 수있는 반환 / 종료 값은 무엇인가요? 자세한 내용을 확인하세요.
셸 스크립트의 종료 상태는 스크립트가 실행 한 마지막 명령의 종료 상태입니다. 예를 들어
#!/bin/sh somecommand
somecommand
의 종료 상태 인 반면
#!/bin/sh somecommand exit 0
somecommand
가 반환되었습니다.이 두 번째 스크립트도 작성할 수 있습니다.
#!/bin/sh somecommand true
스크립트 끝에 exit 0
를 입력해도 반드시 0을 반환합니다. 이렇게하면 스크립트 끝에 도달했을 때만 0을 반환합니다. 예를 들어 다음 스크립트는 항상 3을 반환합니다.
#!/bin/sh exit 3 exit 0
The 다음 스크립트는 구문 오류에 대한 메시지를 표시하는 것 외에도 항상 오류 코드를 반환합니다.
#!/bin/sh } exit 0
다음 스크립트는 해당 항목에 따라 1 또는 0을 반환합니다. 첫 번째 인수 :
#!/bin/sh if [ "$1" = "foo" ]; then exit 1 fi exit 0
다음 스크립트는 iv id = “6c673f16d7″이후 somecommand
의 상태를 반환합니다. >
는 somecommand
가 실패 할 경우 스크립트를 종료합니다.
#!/bin/sh set -e somecommand exit 0
, 스크립트 내에서 발생하는 상황에 관계없이 종료 코드 0으로 종료됩니다.
exit 0
로 끝나면 마지막 명령어가 실행 된 경우에만 코드 0으로 종료됩니다. 스크립트 끝에서exit 0
의 유일한 영향은 이전 지침의 상태 대신 0을 반환하는 것입니다.exit 0
를 실행하면 이전에 발생한 상황에 관계없이 종료 코드 0을 반환합니다.