bash 스크립트 끝에서 종료 코드의 의미에 대해 혼란 스럽습니다. 종료 코드 0은 성공적으로 완료되었음을 의미하며 종료 코드 번호가 더 많다는 것을 알고 있습니다 (실수하지 않으면 127입니까?)
내 질문은 스크립트 끝에서 종료 코드 0을 볼 때에 관한 것입니다. 스크립트가 실패했거나 다른 의미가 있더라도 종료 코드를 0으로 강제 실행합니까?
답변
내장 명령 exit
은 Bash의 참조 에서 쉘을 종료합니다 .
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 -e
somecommand
#!/bin/sh
set -e
somecommand
exit 0