2011-04-30 3 views
1

내 app 용 테스트 스위트를 작성하고 bash 스크립트를 사용하여 테스트 스위트 출력이 예상 출력과 일치하는지 확인한다.bash에서 실행중인 쉘 스크립트에 입력 보내기

for filename in test/*.bcs ; 
do 
    ./BCSC $filename > /dev/null 
    NUMBER=`echo "$filename" | awk -F"[./]" '{print $2}'` 
    gcc -g -m32 -mstackrealign runtime.c $filename.s -o test/e$NUMBER 
    # run the file and diff against expected output 
    echo "Running test file... "$filename 
    test/e$NUMBER > test/e$NUMBER.out 
    if [ $NUMBER = "4" ] 
    then 
     # it's trying to read the line 
     # Pass some input to the file... 
    fi 
    diff test/e$NUMBER.out test/o$NUMBER.out 
done 

시험 # 표준 입력에서 입력을 판독 테스트 4 : 여기 스크립트의 단면도이다. # 4 번 스크립트를 테스트하고 싶다면 샘플 입력 집합을 전달하십시오.

난 그냥 당신이 e4.in 샘플 입력이

test/e4 <test/e4.in> test/e4.out 

처럼 할 수 깨달았다. 실행중인 스크립트에 입력을 전달하는 또 다른 방법이 있습니까?

답변

1

:

test/e$NUMBER > test/e$NUMBER.out 
    if [ $NUMBER = "4" ]; then 
    then 
     test/e$NUMBER > test/e$NUMBER.out <<END_DATA 
test input goes here 
you can supply as many lines of input as you want 
END_DATA 
    else 
     test/e$NUMBER > test/e$NUMBER.out 
    fi 

여러 변종이 있습니다 : 당신이 인용하는 경우 구분 기호 (예 : <<'END_DATA')를 사용하면 여기에있는 문서에서 $ 변수 대체를 바꾸지 않습니다. <<-DELIMITER을 사용하면 각 입력 행에서 선행 탭 문자가 제거되므로 입력을 들여 쓰기하여 주변 코드와 일치시킬 수 있습니다. 자세한 내용은 bash 맨 페이지의 "Here Documents"섹션을 참조하십시오.

0

언급 한 방식은 명령/스크립트를 실행할 때 파일을 stdin으로 리디렉션하는 일반적인 방법입니다.

아마도 당신이 찾고있는 "다른 방법"에 대해 자세히 설명해 주시면 도움이 될 것입니다. 왜 이렇게 다른 방법이 필요한가요? 이 방법으로 허용되지 않는 조치가 있습니까?

+0

죄송합니다. '예상'과 같은 것을 생각하고 있었지만 조건부로 쉘 스크립트에서 수행하는 방법을 알지 못했습니다. –

0

당신은 할 수 있습니다 : 스크립트에 직접 입력 데이터를 제공 할 경우에, 여기-문서를 사용

cat test/e4.in | test/e4 > test/e4.out 
관련 문제