Trong ksh, bashvà zsh, timekhô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ư forhoặ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> errorlệ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-outputtrướ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 timecấ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à timecấu trúc được gọi.
Hầu hết các hệ thống cũng có một timelệnh. Bạn có thể gọi cái đó bằng cách vô hiệu hóa timetừ 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 timevà cmdsẽ được hợp nhất vào error-and-timing-output.
Ngoài ra, timelệnh, trái ngược với timecấ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 bashcó (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> fileví dụ) chuyển hướng đầu ra thời gian tớifile
timetừ 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ộttimequy trình). Và đừng quên những điều được ngụ ý bởi()subshell. ( chờ đợi một chuyên gia bash : p)