4

Это работает:

time ls -l

Это не работает

f() { ls -l }
time f

Во втором случае вывод времени не печатается. Зачем?

2 ответа2

4

Вы пометили это как bash и zsh . Этот ответ относится к bash .

Это ошибка в bash:

f() { ls -l }

Что работает вместо этого:

f() { ls -l ; }

С этим новым определением f команда time работает.

В bash при группировании команд в фигурные скобки за последней командой должна следовать точка с запятой или символ новой строки. Это задокументировано в разделе "Составные команды" в man bash .

(Я бы протестировал это решение под zsh но в настоящее время оно не установлено. Но, согласно этому SO сообщению, решение в zsh может заключаться в том, чтобы запустить f в подоболочке. Обновление: см. Ответ @ mpy для zsh .)

3

@ 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

Это добавляет немного накладных расходов, но, как вы можете видеть из этого (не поддельного ;)) примера, оно, вероятно, незначительно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .