Bash
如何測量程序執行的時間並將其儲存在變數中
為了找出 Bash (v4+) 腳本中的某些操作需要多長時間,我想
time
“單獨”解析命令的輸出,並(最終)在 Bash 變數(let VARNAME=...
)中擷取它。現在,我正在使用
time -f '%e' ...
(或者更確切地說command time -f '%e' ...
是因為內置了 Bash),但是由於我已經重定向了已執行命令的輸出,所以我真的不知道如何去擷取time
命令的輸出。基本上這裡的問題是將輸出與執行命令的輸出分開。time
我想要的是計算開始命令和完成命令之間的時間量(以秒(整數)為單位)的*功能。*它不必是
time
命令或相應的內置命令。*編輯:*鑑於以下兩個有用的答案,我想添加兩個說明。
- 我不想丟棄已執行命令的輸出,但它最終是在 stdout 還是 stderr 上並不重要。
- 我更喜歡直接方法而不是間接方法(即直接擷取輸出而不是將其儲存在中間文件中)。
date
到目前為止使用的解決方案接近我想要的。
要獲取
time
var 的輸出,請使用以下命令:usr@srv $ mytime="$(time ( ls ) 2>&1 1>/dev/null )" usr@srv $ echo "$mytime" real 0m0.006s user 0m0.001s sys 0m0.005s
您也可以只要求一個時間類型,例如 utime:
usr@srv $ utime="$( TIMEFORMAT='%lU';time ( ls ) 2>&1 1>/dev/null )" usr@srv $ echo "$utime" 0m0.000s
要獲得時間,您也可以使用
date +%s.%N
,因此在執行前後取它併計算差異:START=$(date +%s.%N) command END=$(date +%s.%N) DIFF=$(echo "$END - $START" | bc) # echo $DIFF