Это работает:
time ls -l
Это не работает
f() { ls -l }
time f
Во втором случае вывод времени не печатается. Зачем?
Вы пометили это как bash
и zsh
. Этот ответ относится к bash
.
Это ошибка в bash
:
f() { ls -l }
Что работает вместо этого:
f() { ls -l ; }
С этим новым определением f
команда time
работает.
В bash
при группировании команд в фигурные скобки за последней командой должна следовать точка с запятой или символ новой строки. Это задокументировано в разделе "Составные команды" в man bash
.
(Я бы протестировал это решение под zsh
но в настоящее время оно не установлено. Но, согласно этому SO сообщению, решение в zsh
может заключаться в том, чтобы запустить f
в подоболочке. Обновление: см. Ответ @ mpy для zsh
.)
@ John1024 дал тебе ответ для bash
. Я пытаюсь ответить на тег zsh
...
Вы получите статистику по времени, если вы создали подоболочку для своей функции:
% zsh
% f() { sleep 1 }
% time f
% time (f)
( f; ) 0.00s user 0.05s system 4% cpu 1.061 total
% time sleep 1
sleep 1 0.00s user 0.03s system 2% cpu 1.045 total
Это добавляет немного накладных расходов, но, как вы можете видеть из этого (не поддельного ;)
) примера, оно, вероятно, незначительно.