2017-10-14 7 views
0

私のプログラムが複数回時間がかかるようにシェルスクリプトを作成しようとしています。私が試したことは以下の通りですシェルスクリプトは 'time'からリアルタイムに取得して変数に保存します

time [./finder -p ARG1 ARG2 ARG3] > /dev/null 2>&1 | grep real | awk '{print $2}' 

基本的に私は私のプログラムの出力を削除したいので、私はnullに出力をリダイレクトしようとしています。私はまた、時間の出力を削除したい。それはほとんど働いていないので、結果を変数に保存してループ内で実行する必要があります。どのようにそれを行うことができます任意のアイデア?

+1

'[./finder -p ARG1 ARG2 ARG3]'ルックスをTclのように。残りは標準のPOSIXシェルのようです。 – chepner

+0

[BashFAQ#32](http://mywiki.wooledge.org/BashFAQ/032):* '時間'の出力を変数またはファイルにリダイレクトするにはどうすればいいですか?* –

答えて

0

注意:「時間」はシェル組み込みにすることができます。また

env time bash -c './finder >/dev/null' 2>&1 | awk '$2 == "real" {print $1}' 

は、nullに1を指示するために悪いことが、その後すぐに同じに2を指示します:組み込みを避け、適切なパイプラインと出力動作を取得するための/ usr/binに/時間またはENVとを呼び出します場所。

あなたがバッククォートで囲むと、変数に割り当てる、または単純な句読点のためにすることができますは、一時ファイルにリダイレクトしてから使用します。ここでは

ELAPSED=`cat time.txt` 

はawkのいくつかの例の出力を解析している次のとおりです。

$ env time pwd 
/tmp 
     0.01 real   0.00 user   0.00 sys 
あなたはPOSIX出力を好む場合

-pスイッチを渡すことができます。

$ env time -p pwd 
/tmp 
real   0.01 
user   0.00 
sys   0.00 
+0

これは何も表示されません。変数に0.000時間の結果を保存するにはどうすればよいですか? – Cows42

+1

組み込みの 'command'を使うことができます。 'env'は必要ありません。 'コマンド時間bash -c '...'' – chepner

0

経由 "中間" 一時ファイルと形式-fオプション:

real_time_val=$(/usr/bin/time -f "%e" -o tmpfile [./finder -p ARG1 ARG2 ARG3] > /dev/null 2>&1 && cat tmpfile) 

  • %e - 秒で、プロセスで使用される実際の(柱時計)時間が経過。

  • -o FILE -

代表的な結果FILEにリソース使用統計を書く代わりに、標準エラーストリームへ:

$ echo "$real_time_val" 
0.02 
関連する問題