2010-02-22 2 views
5

나는 $를 사용하여 마지막으로 실행 한 명령의 종료 코드를 확인하는 bash 스크립트를 가지고 있습니까? 변수하지만 지금은 프로그램이 성공적으로 실행되면 0을 반환하는 C 프로그램 (해당 스크립트에서)을 실행하고 있습니다. 내 bash 스크립트에서 C 프로그램의 반환 값을 잡을 수있는 방법이 있습니까?bash 스크립트에서 C 프로그램의 리턴 값을 확인 하시겠습니까?

awk, sed 등과 같은 다른 명령이 C로 작성되었다고 생각합니다. 어떻게 $를 사용합니까? 출구 코드를 그 안에 저장 하시겠습니까? 내 C 프로그램에 $로 종료 코드를 저장하도록하려면 어떻게해야합니까 ??

제 질문에 대한 답변을 드리겠습니다.

답변

11

아무 것도 할 필요가 없습니다. C 프로그램이 0을 반환하면 그 변수가 실행 된 쉘의 변수 $?에 저장됩니다.

+0

종료 상태는 8 비트로 제한되므로 프로그램이 반환하는 하위 8 비트 만 $로 저장됩니다. –

+0

@Chris Dodd - POSIX는 반환 값을 0 - 255로 제한하므로 8 비트 저장은 문제가되지 않습니다. 최적화입니다. –

1

bash는 자동으로 $?의 종료 코드를 찾습니다. 또는 0/0이 아닌 경우에만 if에서 명령을 사용할 수 있습니다.

1

C 프로그램의 리턴 코드는 int main() 함수 또는 인수 exit() 함수가 리턴 한 값입니다. 그런 다음 시스템은 wait() 시스템 호출을 통해 상위 프로세스에서 사용할 수 있도록합니다. 부모 프로세스가 bash이면이 값은 $? 변수를 통해 사용할 수 있습니다.

+0

errno가 관련 있다고 생각하는 이유는 무엇입니까? –

+0

새로운 프로세스가'fork()'로 생성되고 man 페이지에 그 프로세스가 언급되어 있다고 가정합니다. 내가 잘못? – mouviciel

+0

음, Windows (내가 bash를 사용함)에는 fork()가 없습니다. 그리고 25 년이 넘는 UNIX 프로그래밍에서 errno는 프로세스의 종료 값과 관련이 있다는 어떠한 제안도 본 적이 없습니다. 나는 네가 틀렸다는 말은 아니지만 네가 옳다고 말하기 전에 챕터와 구절이 필요할거야. –

관련 문제