Trong ksh
, bash
và zsh
, time
không phải là một lệnh (dựng sẵn hay không), đó là một từ dành riêng trong ngôn ngữ như for
hoặc while
.
Nó được sử dụng để đặt thời gian cho một đường ống 1 .
Trong:
time for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
Bạn có cú pháp đặc biệt báo cho shell chạy đường ống đó:
for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
Và báo cáo thống kê thời gian cho nó.
Trong:
time cmd > output 2> error
Tương tự như vậy, bạn đang định thời gian cho cmd > output 2> error
lệnh và số liệu thống kê thời gian vẫn tiếp tục trên stderr của shell.
Bạn cần:
{ time cmd > output 2> error; } 2> timing-output
Hoặc là:
exec 3>&2 2> timing-output
time cmd > output 2> error 3>&-
exec 2>&3 3>&-
Để stderr của shell được chuyển hướng đến timing-output
trước khi cấu trúc thời gian (một lần nữa, không phải lệnh ) được sử dụng (ở đây theo thời gian cmd > output 2> error 3>&-
).
Bạn cũng có thể chạy time
cấu trúc đó trong một lớp con có chuyển hướng stderr của nó:
(time cmd > output 2> error) 2> timing-output
Nhưng subshell đó là không cần thiết ở đây, bạn chỉ cần stderr được chuyển hướng tại thời điểm mà time
cấu trúc được gọi.
Hầu hết các hệ thống cũng có một time
lệnh. Bạn có thể gọi cái đó bằng cách vô hiệu hóa time
từ khóa. Tất cả những gì bạn cần làm là trích dẫn từ khóa đó bằng cách nào đó vì từ khóa chỉ được công nhận như vậy khi nghĩa đen.
'time' cmd > output 2> error-and-timing-output
Nhưng hãy cẩn thận định dạng có thể khác nhau và tiêu chuẩn của cả hai time
và cmd
sẽ được hợp nhất vào error-and-timing-output
.
Ngoài ra, time
lệnh, trái ngược với time
cấu trúc không thể thời gian đường ống hoặc lệnh ghép hoặc hàm hoặc hàm dựng ...
Nếu nó là một lệnh dựng sẵn, nó có thể có thời gian gọi các hàm hoặc hàm dựng, nhưng nó không thể chuyển hướng thời gian hoặc đường ống hoặc lệnh ghép.
1 Lưu ý rằng bash
có (lỗi có thể được coi là) một lỗi theo đó time (cmd) 2> file
(nhưng không phải là time cmd | (cmd2) 2> file
ví dụ) chuyển hướng đầu ra thời gian tớifile
time
từ khóa shell hay/usr/bin/time
. Có thể có một số bộ mô tả liên quan ở đây (vỏ và những bộ được gắn vào mộttime
quy trình). Và đừng quên những điều được ngụ ý bởi()
subshell. ( chờ đợi một chuyên gia bash : p)