2010-11-21 6 views
2

私は、Cプログラムを実行し、Unixのtimeコマンドを使って実行時間を測定するスクリプトを作成しようとしていました。時間を計算するためのシェルスクリプト

cc /home/pop/Daa/abc.c 

r = `time /home/pop/Daa/./a.out` 

echo "recursion" $r >> log.txt 

cc /home/pop/Daa/xyz.c 

d = `time /home/pop/Daa/./a.out ` 

echo "dynamic" $d >> log.txt 

に従いますが、スクリプトを実行した後にlog.txtファイルは言葉だけ再帰とダイナミックが含まれているよう

スクリプトが見えます。時間の値は見当たりません。しかし、コマンドライン端末でtimeコマンドを実行するには、この出力は、実行の唯一の「本当の」時間を含むようにフォーマットされ、ログファイルに書き込まれますすることができますどのように次のような出力

real 0m0.001s 
user 0m0.000s 
sys 0m0.000s 

を与えましたか?

答えて

1

timeの出力が行きますstderrに。あなたはredirect itです。

TIMEFORMAT=%R 
r=$({ time /home/pop/Daa/./a.out; } 2>&1) 

また、等号の周囲にスペースを入れることはできません。バックチックの代わりに$()を使用するのはpreferableです。読みやすいので、一重引用符と混乱することはなく、入れ子にする方が簡単です。

1

変数に値を割り当てるときは、等号の周囲にスペースを入れてはいけません。

r=`time /home/pop/Daa/./a.out` 

あなただけの "本当の" 時間が必要な場合は、grepを使用します:たとえば

r=`time /home/pop/Daa/./a.out | grep real` 

またはtimeコマンドで%eを使用します。

r=`time -f '%e' /home/pop/Daa/./a.out` 
+0

"-f:command not found" - Bashには組み込みの 'time'があるためです。リアルタイムのみを出力したい場合は、 'TIMEFORMAT'変数を使います。 'time -f'を使うには、' command time -f ... 'や'/usr/bin/time -f ... 'のように外部ユーティリティを使うように指定する必要があります。 –