2016-07-05 4 views
0

두 개의 .cpp 파일을 명령 줄 인수로 사용하여 컴파일하고 실행 시간을 측정하는 배치 스크립트를 작성하려고합니다.(standard_in) 1 : bash 스크립트의 구문 오류

#!/bin/bash 
error=0 
g++ -O2 -std=c++11 $1 -o __gen 
((error|=$?)) 
g++ -O2 -std=c++11 $2 -o __run 
((error|=$?)) 
if (($error != 0)); then 
    echo 'Compilation failed' 
    rm __gen __run 
    exit 1; 
fi 

clear 
echo 'Compilation was succesful' 

time=0.0 
until ((`bc <<< "$time > 1.5"`)); do 
    ./__gen > in 
    time=$(/usr/bin/time -f "%e" ./__run <in> out) 
done 

첫 번째 .cpp는 테스트 생성기의 소스 코드입니다. 두 번째 프로그램에 대한 입력을 생성합니다. 두 번째 프로그램이 1.5 초 이상 실행될 때 배치가 중지되도록하고 싶습니다.

스크립트를 실행하면 (standard_in) 1: syntax error이됩니다. 도와 주시겠습니까?

답변

0

이 명령을

/usr/bin/time -f "%e" ./__run <in> out 

출력 아무것도 (전체 표준 출력은 out을 파일로 리디렉션하고, time 명령 출력은 시간이 stderr로하기 때문에). 따라서 변수 time은 루프의 첫 번째 반복 이후에 비어있게됩니다. "$time > 1.5"> 1.5으로 계산되어 bc (왼쪽 피연산자는 >이 누락 됨)에 구문 오류가 발생합니다.

임시 파일에 시간을 기록하고 나중에 해당 파일을 변수에 읽으려면 옵션을 사용하는 것이 좋습니다 (). 이것은 또한 __run 프로그램이 데이터를 stderr로 출력하여 다시 입력을 bc으로 망칠 수있는 가능한 문제를 제거합니다.

+0

감사합니다. 하지만 어떻게 해결할 수 있습니까? ./__run은 터미널에 표시하고 싶지 않은 출력을 생성하지만 시간 변수로 이동하지 않습니다. – manolismi