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