Linux

比較兩個函式的執行時間

  • October 3, 2022

我正在嘗試編寫一個函式,它將兩個命令作為輸入,計算它們的執行時間,然後將這些時間輸出到文本文件。讀完這篇文章後,我了解了大部分情況,並且可以一次將我的執行時間寫入一個文件。我現在遇到的問題是讓函式接受兩個多字輸入。我目前的程式碼如下所示:

timeDiff () {
 { time "$1" ; } 2> ~/file.txt
 { time "$2" ; } 2>> ~/file.txt
}

如果我用我想要的功能順序執行這些行,一切都很好。該文件被兩個函式的時間資訊覆蓋。以下是我對此的一些嘗試和問題:

timeDiff grep "str" file1 query database lookup.sql

這將導致我的文件有時會在 grep 上出現警告,並且bash: str: command not found.

timeDiff 'grep "str" file1' 'query database lookup.sql'

這將導致我的文件有 bash:grep “str” file1: No such file or directory,有時,並且 bash:query database lookup.sql: No such file or directory。

我認為這與我的 grep 需要引號有關,但也許有更好的方法來編寫函式的輸入。我是初學者,所以我很想學習!謝謝!

和:

 { time "$1" ; } 2> ~/file.txt

使用bash具有time關鍵字的 shell,您可以使用time關鍵字來計算"$1"shell 程式碼的評估時間。"$1"是執行名稱在函式的第一個位置參數中的命令的程式碼:

和:

timeDiff grep "str" file1 query database lookup.sql

您正在呼叫作為第一個參數和timeDiff第二個參數(以及作為第三個等)grep``str``file1

不帶參數time "$1"呼叫的命令的執行時間也是如此。至少需要一個論據,所以會抱怨。grep``grep

timeDiff 'grep "str" file1' 'query database lookup.sql'

這次$1會,grep "str" file1但不太可能有那個名字的命令。

您想要的是計算在第一個和第二個參數中傳遞的 shell 程式碼的評估時間,例如:

timeDiff () {
 time eval " $1"
 time eval " $2"
} 2> ~/file.txt

或者可能:

timeDiff () {
 eval "time {
   $1
 }"
 eval "time {
   $2
 }
} 2> ~/file.txt

評估包含以下內容的 shell 程式碼:

time {
 contents-of-$1
}

對正文是第一個位置參數的內容的命令組進行計時。

還要注意:

{ time cmd; } 2> file

時間將結束file,但也會出現錯誤cmd(以及 shell 無法執行的錯誤,cmd如果有的話)。

獲取時間file,您需要以下內容:

{ time cmd 2>&3 3>&-; } 3>&2 2> file

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