쉘 스크립트로 일련의 작업을 순차적으로 시키려면

quanta1의 이미지

제가 초보라서 기본적인 질문을 하더라도 이해해 주시면 감사하겠습니다.

a.out 이란 프로그램을 돌리고
계산이 끝난 후에 나오는 결과 파일, result.dat가 나오면
gcc -lm ascii.c를 컴파일 해서 나오는 실행파일, b.out을 실행하는 스크립트 알려주시면 감사하겠습니다.

ktd2004의 이미지

이걸 원하시는 건가요?

#!/bin/sh
./a.out
gcc -lm ascii.c
./b.out

아니면 에러 핸들링까지 한다면

#!/bin/sh
./a.out && gcc -lm ascii.c && ./b.out
quanta1의 이미지

위 처럼 할 때 a.out이 실행되는 동안에 gcc-lm ascii.c 이 실행될 수 있지 않나요?
그러면 안되거든요. b.out이 실행되려면 a.out이 끝난 결과가 있어야 하거든요

lifthrasiir의 이미지

둘 다 순차적으로 실행되는 코드입니다. 셸 스크립트에서는 별도로 지정하지 않는 한(보통 뒤에 &를 붙이거나 하지 않는 한) 특정한 명령이 다 실행되고 반환될 때까지 다음 명령으로 넘어가지 않습니다.

오호라의 이미지

#!/bin/bash
 
./a.out
 
# main() 리턴값이 0 이 아니면 ( invalid != 0 )
if [ $? -ne 0 ] ; then
   echo "I'm sorry."
   exit
fi
 
gcc -lm ascii.c
 
# main() 리턴값이 0 이 아니면 ( invalid != 0 )
if [ $? -ne 0 ] ; then
   echo "I'm sorry."
   exit
fi
 
./b.out
 
# main() 리턴값이 0 이 아니면 ( invalid != 0 )
if [ $? -ne 0 ] ; then
   echo "I'm sorry."
   exit
fi

바로 전의 실행상태로 현재 실행할지 결정하고 싶어시는 듯합니다.

주의하실 점은 모든 유틸, 쉘... 등이 정상종료 0을 리턴하리라는 보장이 없습니다.

반드시 확인을 해주어야 합니다. 대표적으로 diff 가 그렇습니다. ^^;

Hello World.

quanta1의 이미지

여러분들이 이렇게 잘 설명해 주시니 감사합니다.