2011-12-19 6 views
3

명령을 실행 한 후에 반환 코드가 $?에 포함될 것이라고 알고 있지만 스크립트가 실행 된 후 $?은 무엇을 의미합니까? 해당 스크립트에서 마지막 명령의 리턴 코드는 무엇입니까?bash 스크립트에 리턴 코드가 있습니까?

예기치 않은 시스템 중단이나 중단으로 중단되지 않고 스크립트가 앞뒤로 실행되었는지 알 수 있습니까? 내가 그 로그 파일에 무엇을 찾을 것

나는 아래 excuted 같은 스크립트가있는 경우, A가 실행되는 동안

Command A; 
if [ $? -eq 0] 
then 
echo "OK" >> log 
else 
echo "failed" >> log 
fi 

시스템

이 중단? "OK", "failed"또는 nothing?

답변

6
  1. 예 또는 exit 다음에 전달 된 값. exit 31.

  2. 다른 스크립트 내에서 조치를 취하지 않고 명시 적으로 지정하지 않아도됩니다.

+0

다른 스크립트가 인터럽트가 발생하면 셸에보고 된 종료 상태가 0이되지 않습니다 (스크립트가 인터럽트를 처리하거나 무시하고 모두 종료 후 0 번 종료되도록 조정). 시스템이 멈 추면 호출하는 스크립트도 멈추게됩니다. 재시도 등을 다루는 매우 정교한 시스템이 없다면 아무 것도 결정할 기회가 없습니다. –

+0

스크립트가 실행하는 마지막 명령이 'exit'가 아니라면 (예. 스크립트 파일의 끝으로 실행되었거나'set -e'와 오류로 인해 빠져 나가면 스크립트의 리턴 코드는 실행 된 마지막 명령의 리턴 코드가됩니다. –

+0

"예"가됩니다. –

4

$? 마지막으로 실행 된 명령의 종료 상태를 읽습니다. 함수가 반환 된 후에 $? 함수에서 실행 된 마지막 명령의 종료 상태를 제공합니다. 이 기능에게 "반환 값을주는 배쉬의 방법입니다.

Example

#!/bin/bash 

echo hello 
echo $? # Exit status 0 returned because command executed successfully. 

lskdf  # Unrecognized command. 
echo $? # Non-zero exit status returned because command failed to execute. 

echo 

exit 113 # Will return 113 to shell. 
     # To verify this, type "echo $?" after script terminates. 

# By convention, an 'exit 0' indicates success, 
#+ while a non-zero exit value means an error or anomalous condition 
+0

도움 주셔서 감사합니다 :) – erical

0

스크립트의 리턴 코드가 실제로 실행 된 마지막 명령의 반환 코드, 일부 명령은 당신이 어떤에서 실행을 완료 할 수 있도록 점을 지정하고 임의로 반환 코드를 설정하면 스크립트의 경우 exit이고 함수의 경우 return이지만 인수를 생략하면 이전 명령의 리턴 코드 만 사용됩니다.

관련 문제