В ksh, bashі zsh, timeне є командою (вбудованою чи ні), це зарезервоване слово на мові, як forабо while.
Він звик до часу 1 трубопроводу .
В:
time for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
У вас є спеціальний синтаксис, який повідомляє оболонці виконувати цю трубопровід:
for i in 1 2; do cmd1 "$i"; done | cmd2 > redir
І повідомте про це статистику часу.
В:
time cmd > output 2> error
Це те ж саме, що ви синхронізації з cmd > output 2> errorкомандою, і статистика синхронізації до сих пір йдуть на потік помилок оболонки.
Тобі потрібно:
{ time cmd > output 2> error; } 2> timing-output
Або:
exec 3>&2 2> timing-output
time cmd > output 2> error 3>&-
exec 2>&3 3>&-
Щоб stderr оболонки був перенаправлений до того, timing-outputяк буде використана конструкція часу (знову ж таки, не команда ) (тут час від часу cmd > output 2> error 3>&-).
Ви також можете запустити цю timeконструкцію в підшалі, на яку перенаправлений stderr:
(time cmd > output 2> error) 2> timing-output
Але ця додаткова оболонка тут не потрібна, вам потрібно лише перенаправити stderr під час timeвиклику конструкції.
Більшість систем також мають timeкоманду. Ви можете викликати це, відключивши timeключове слово. Все, що вам потрібно зробити, - це якось цитувати це ключове слово, оскільки ключові слова розпізнаються як такі лише в прямому сенсі.
'time' cmd > output 2> error-and-timing-output
Але будьте обережні, формат може бути різним, і жорсткішим обох, timeі cmdвони будуть об'єднані в error-and-timing-output.
Крім того, timeкоманда, на відміну від timeконструкції, не може здійснювати трубопроводи чи складні команди чи функції чи вбудовані оболонки ...
Якби це була вбудована команда, вона могла б функціонувати викликами часу або вбудованими, але вона не могла би вчасно переспрямувати або конвеєри чи складені команди.
1 Зауважте, що bashмає (що можна вважати) помилку, за допомогою якої time (cmd) 2> file(але не, time cmd | (cmd2) 2> fileнаприклад) перенаправляє вихідний сигнал наfile
time, ключове слово оболонки, або/usr/bin/time. Тут може бути задіяно кілька наборів дескрипторів (оболонки та ті, що додаються доtimeпроцесу). І не будемо забувати про тих, що маються на увазі()підгалузі. ( чекає спеціаліста з башти : p)