Это работает:
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
Это добавляет немного накладных расходов, но, как вы можете видеть из этого (не поддельного ;)) примера, оно, вероятно, незначительно.