Como executar o “tempo” em uma função no zsh

4

Isso funciona:

time ls -l

Isso não funciona

f() { ls -l }
time f

Nenhuma saída de tempo é impressa no segundo caso. Por quê?

    
por justingordon 13.12.2013 / 21:52

2 respostas

3

@ John1024 deu-lhe a resposta para bash . Eu tento responder a tag zsh ...

Você obtém as estatísticas de tempo, se você gerar um subshell para sua função:

% 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

Isso adiciona um pouco de sobrecarga, mas como você pode ver neste exemplo (não-faked ;) ), provavelmente é insignificante.

    
por 13.12.2013 / 22:11
4

Você marcou isso com bash e zsh . Esta resposta se aplica a bash .

Este é um erro em bash :

f() { ls -l }

O que funciona em vez disso é:

f() { ls -l ; }

Com essa nova definição de f , o comando time funciona.

Em bash , quando agrupar comandos em chaves, o último comando deve ser seguido por um ponto-e-vírgula ou por uma nova linha. Isso está documentado em "Comandos compostos" em man bash .

(Eu testaria essa solução em zsh , mas atualmente não a tenho instalada. Mas, conforme esta postagem SO, a solução em zsh pode ser executar f em uma subshell. Update: Veja a resposta de @mpy para zsh . )

    
por 13.12.2013 / 22:00

Tags