Có thể in thời gian thực thi của lệnh shell với kết hợp sau không?Thời gian thực hiện in của lệnh shell
[email protected]:~# "command to execute" && echo "execution time"
Có thể in thời gian thực thi của lệnh shell với kết hợp sau không?Thời gian thực hiện in của lệnh shell
[email protected]:~# "command to execute" && echo "execution time"
Đừng quên rằng có một sự khác biệt giữa bash của BUILTIN time
(mà nên được gọi là theo mặc định khi bạn làm time command
) và /usr/bin/time
(yêu cầu bạn gọi nó bằng đường dẫn đầy đủ của nó).
Bản dựng time
luôn in thành tiêu bản, nhưng /usr/bin/time
sẽ cho phép bạn gửi đầu ra của thời gian tới một tệp cụ thể, do đó bạn không can thiệp vào luồng stderr của lệnh đã thực hiện. Ngoài ra, định dạng của /usr/bin/time
có thể định cấu hình trên dòng lệnh hoặc theo biến môi trường TIME
, trong khi định dạng của bash là time
là chỉ được định cấu hình bởi biến môi trường 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]
Nó cũng phân biệt giữa thời gian thực sử dụng và thời gian hệ thống sử dụng.
Đó chắc chắn là câu trả lời cơ bản - nhưng có một số biến chứng nếu bạn muốn nhìn thấy đầu ra lỗi từ lệnh và chưa gửi thông tin thời gian để đầu ra tiêu chuẩn như các câu hỏi không. Lệnh thời gian ghi vào stderr. Những gì bạn đề xuất có lẽ là đủ chính xác - do đó +1 của tôi. –
'time' ghi vào tty, không phải là stderr. Mà tôi đoán làm cho mọi thứ tồi tệ hơn. – mob
time
là lệnh tích hợp trong hầu hết các shell ghi thông tin thời gian thực hiện vào tty.
Bạn cũng có thể thử một cái gì đó giống như
start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.
Hoặc trong bash
:
start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
Trong zsh bạn có thể sử dụng
=time ...
Trong bash hoặc zsh bạn có thể sử dụng
command time ...
Những (bằng cơ chế khác nhau) buộc một lệnh bên ngoài để được sử dụng.
Thêm vào câu trả lời @ đám đông của:
Phụ thêm %N
-date +%s
cho chúng ta nanosecond chính xác:
start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
Nếu tôi bắt đầu một quá trình dài chạy như một bản sao hoặc băm và tôi muốn biết sau bao lâu, tôi chỉ làm điều này:
$ date; sha1sum reallybigfile.txt; date
Điều này sẽ dẫn đến kết quả sau:
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
Được cấp, như được triển khai ở đây không chính xác lắm và không tính thời gian đã trôi qua. Nhưng nó bẩn đơn giản và đôi khi tất cả những gì bạn cần.
Để đo lường đồng bằng đường thẳng, hãy thử gnonom.
Đây là tiện ích dòng lệnh, hơi giống như ts của những người khác, để thêm thông tin dấu thời gian vào đầu ra tiêu chuẩn của lệnh khác.Hữu ích cho các quy trình chạy dài, nơi bạn muốn có một hồ sơ lịch sử về những gì mất quá nhiều thời gian.
Đường ống bất kỳ thứ gì vào gnomon sẽ thêm một dấu thời gian vào mỗi dòng, cho biết dòng đó là dòng cuối cùng trong vùng đệm - tức là mất bao lâu để dòng tiếp theo xuất hiện. Theo mặc định, gnomon sẽ hiển thị số giây trôi qua giữa mỗi dòng, nhưng đó là cấu hình.
Từ 'man bash':" Biến TIMEFORMAT có thể được đặt thành chuỗi định dạng chỉ định cách hiển thị thông tin thời gian " –
Rất tiếc - tôi * nghĩ * có một số cách để định dạng nó, nhưng tôi đã bỏ lỡ nó trong 'thời gian trợ giúp' bởi vì tôi chỉ liếc qua nó và tôi nghĩ đó là một đối số dòng lệnh. Tôi sẽ cập nhật câu trả lời. –
-1 Điều này dường như không trả lời được câu hỏi nào cả. –