2016-07-05 14 views
0

コマンドライン引数として2つの.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は、テストジェネレータのソースコードです。 2番目のプログラムの入力を生成します。 2回目のプログラムが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に構文エラーが発生します(左オペランド>がありません)。

-oというオプションを使用して/usr/bin/timeというオプションを使用すると、一時ファイルに時刻を書き込み、後でそのファイルを変数に読み込むことができます。 これはまた、プログラム__runがデータをstderrに出力し、入力を再びbcに害する可能性のある問題を排除します。

+0

ありがとうございました!しかし、どうすればそれを修正できますか? ./__runは、端末に表示したくない出力を生成し、時間変数にも出力しません – manolismi

関連する問題