2017-10-14 45 views
0

我想爲我的程序製作一個shell腳本多次花費時間,然後進行分割以獲得執行的平均時間。Shell腳本從'時間'獲得實時並保存到變量

我已經試過是以下幾點:

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

基本上我想刪除我的程序的輸出,所以我想將輸出重定向到空。我也想刪除時間的輸出。它幾乎沒有工作,我也需要將結果保存在一個變量中,以便我可以在循環中運行它。任何想法如何可以做到?

+1

'[./finder -p ARG1參數3]'容貌像Tcl;其餘的看起來像標準的POSIX外殼。 – chepner

+0

[BashFAQ#32](http://mywiki.wooledge.org/BashFAQ/032):*我如何將'time'的輸出重定向到一個變量或文件?* –

回答

0

注意:「時間」可以是一個shell內建的。調用如在/ usr/bin/time會或與ENV避免內置並得到適當的管道和輸出行爲:

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

而且,那就要爛指導1至零,然後立即指示2相同的地點。

你可以用反引號包圍並分配給變量,或者更簡單的標點符號重定向到一個臨時文件,然後使用:

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 
相關問題