可以通過以下組合打印shell命令的執行時間嗎?shell命令的打印執行時間
[email protected]:~# "command to execute" && echo "execution time"
可以通過以下組合打印shell命令的執行時間嗎?shell命令的打印執行時間
[email protected]:~# "command to execute" && echo "execution time"
不要忘了,之間是有區別bash的內置time
(這應該是默認調用的時候你做time command
)和/usr/bin/time
(它應該要求你用它的完整路徑調用它)。
內置time
總是打印到stderr,但/usr/bin/time
將允許您將時間輸出發送到特定文件,因此您不會干擾執行的命令的stderr流。此外,/usr/bin/time
的格式是由環境變量TIME
命令行或上配置的,而bash的內置time
格式是僅由TIMEFORMAT
環境變量構成。
$ time factor 1234567889234567891 # builtin
1234567889234567891: 142662263 8653780357
real 0m3.194s
user 0m1.596s
sys 0m0.004s
$ /usr/bin/time factor 1234567889234567891
1234567889234567891: 142662263 8653780357
1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+215minor)pagefaults 0swaps
$ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed`
1234567889234567891: 142662263 8653780357
$ cat timed
1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+217minor)pagefaults 0swaps
[email protected]:~# time [command]
它還區分二手實時和系統時間之間。
這當然是最基本的答案 - 但如果你想看到從命令輸出的錯誤,但發送定時信息到標準輸出的問題,確實也有一些併發症。時間命令寫入標準錯誤。你的建議可能足夠準確 - 因此我的+1。 – 2009-11-01 05:00:57
'時間'寫入tty,而不是stderr。我猜想這會讓事情變得更糟。 – mob 2012-04-27 20:52:00
time
是大多數shell中的內置命令,它將執行時間信息寫入到tty中。
你也可以嘗試像
start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.
或者在bash
:
start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
在zsh中可以使用
=time ...
在bash或ZSH可以使用
command time ...
這些(通過不同的機制)強制要使用的外部命令。
添加到@暴民的回答是:
追加%N
到date +%s
給了我們納秒級精度:
start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
如果我開始一個長期運行的過程是怎樣的一個副本或散列,我想知道後來花了多長時間,我只是這樣做:
$ date; sha1sum reallybigfile.txt; date
這將導致下面的輸出:
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
授予,這裏實施它不是很精確,不計算經過時間。但它很簡單,有時候只是你需要的東西。
對於逐行增量測量,請嘗試gnonom。
它是一個命令行實用程序,有點像moreutils的ts,用於將時間戳信息添加到另一個命令的標準輸出。對於需要長時間歷史記錄的長時間運行流程非常有用。
對gnomon管道的任何事情都會在每行上添加一個時間戳,表明該行是多長時間纔是緩衝區的最後一行 - 也就是說,下一行顯示需要多長時間。默認情況下,gnomon將顯示每行之間所經過的秒數,但這是可配置的。
從'man bash':「TIMEFORMAT變量可以設置爲指定應該如何顯示時間信息的格式字符串」 – 2009-11-01 06:46:34
糟糕 - I *認爲*有一些格式化的方法,但是我在'help time'中錯過了它,因爲我只查看了它,而且我認爲這是一個命令行參數。我會更新答案。 – 2009-11-01 15:31:13
-1這似乎沒有回答這個問題。 – 2011-07-12 01:47:41