В 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)