Bash

如何測量程序執行的時間並將其儲存在變數中

  • April 17, 2019

為了找出 Bash (v4+) 腳本中的某些操作需要多長時間,我想time“單獨”解析命令的輸出,並(最終)在 Bash 變數(let VARNAME=...)中擷取它。

現在,我正在使用time -f '%e' ...(或者更確切地說command time -f '%e' ...是因為內置了 Bash),但是由於我已經重定向了已執行命令的輸出,所以我真的不知道如何去擷取time命令的輸出。基本上這裡的問題是將輸出與執行命令的輸出分開。time

我想要的是計算開始命令和完成命令之間的時間量(以秒(整數)為單位)的*功能。*它不必是time命令或相應的內置命令。


*編輯:*鑑於以下兩個有用的答案,我想添加兩個說明。

  1. 我不想丟棄已執行命令的輸出,但它最終是在 stdout 還是 stderr 上並不重要。
  2. 我更喜歡直接方法而不是間接方法(即直接擷取輸出而不是將其儲存在中間文件中)。

date到目前為止使用的解決方案接近我想要的。

要獲取timevar 的輸出,請使用以下命令:

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

引用自:https://unix.stackexchange.com/questions/12068