2009-05-13 28 views

Trả lời

16

Bạn có muốn đặt mã này trong tập lệnh của mình hay thực hiện từ quá trình bắt đầu tập lệnh không?

Đối với trường hợp sau, bạn có thể sử dụng từ dành riêng "thời gian" và sau đó phân tích cú pháp của từ đó để nhận được khoảng thời gian tập lệnh.

Nếu bạn muốn thực hiện điều này từ bên trong tập lệnh, bạn có thể đặt SECONDS thành 0 và mỗi lần sau đó bạn tham chiếu biến đó sẽ được cập nhật thành số giây đã trôi qua. Vì vậy, bạn có thể đặt "SECONDS = 0" ở phần đầu của tập lệnh, và bất cứ khi nào bạn cần thời gian trôi qua, nó sẽ ở trong biến SECONDS.

Bạn cũng có thể sử dụng $ GIÂY lừa trên dòng lệnh là tốt, ví dụ:

$ SECONDS=0; sleep 5 ; echo "that took approximately $SECONDS seconds" 

Thời gian từ dành riêng và biến GIÂY đều được ghi lại trong trang bash người đàn ông.

+4

bash là một nguồn không bao giờ kết thúc của lừa và bất ngờ – flybywire

7

này hoạt động trong Bash, và cũng Zsh:

# Set time format to seconds 
TIMEFORMAT=%R 
# Time a process 
PROC_TIME=$(time (insert command here >/dev/null 2>&1) 2>&1) 
echo $PROC_TIME 
  • Hai chuyển hướng đầu tiên giấu đầu ra của quá trình của bạn ">/dev/null 2> & 1"
  • Các chuyển hướng cuối cùng là cần thiết vì "thời gian" in thời gian trên stderr
+0

'rtime() {TIMEFORMAT =% R; echo $ (time ("$ 1" 2> & 1) 2> & 1)} '.... và sau đó ...' echo $ SECONDS' - Đây là phép thuật ™ ... _và tôi sử dụng nó ** TẤT CẢ ** thời gian_. –

-1

Sử dụng lệnh thời gian. Lưu ý rằng phiên bản bash của thời gian không giống như/usr/bin/time. Vì vậy, bạn sẽ có một cái gì đó như:

TIME=`/usr/bin/time --format="%e" your_command_here >/dev/null` 

Định dạng chỉ kéo giá trị thời gian "thực" ra ngoài. Bạn sẽ cần phải chuyển đổi từ một chuỗi nếu bạn muốn làm bất cứ điều gì nhiều hơn hiển thị nó.

Nếu bạn chỉ muốn xuất chuỗi, hãy sử dụng export.

+0

Biến '$ TIME' thực sự được sử dụng bởi'/usr/bin/time' do đó sẽ tốt hơn nếu bạn chọn một tên biến khác. Một cách để tránh va chạm như vậy là không sử dụng tên mà tất cả các trường hợp trên cho các biến của riêng bạn. –

0

Sử dụng GNU time,

\time -p -o time.log $COMMAND 

và sau đó đọc time.log.

(Sử dụng một trong hai \time hoặc command time, nếu không bạn sẽ được sử dụng Bash của time built-in, mà không hỗ trợ các tùy chọn này.)

này sẽ làm việc ngay cả khi $COMMAND in để thiết bị lỗi chuẩn (trong đó sẽ nhầm lẫn Oli của trả lời), và giữ stdout/stderr (câu trả lời của Farzy không).

-o ... nói time để gửi sản lượng của nó vào một tập tin chứ không phải là để stderr (như là mặc định), và -p tạo ra truyền thống

real 0.00 
user 0.00 
sys 0.00 

hơn là mặc định GNU thời gian của

0.00user 0.00system 0:00.01elapsed 8%CPU (0avgtext+0avgdata 0maxresident)k 
80inputs+0outputs (1major+188minor)pagefaults 0swaps 
Các vấn đề liên quan