Mede o tempo de execução de um comando, incluindo a expansão da substituição do comando

3

Como eu iria medir o tempo de execução de comandos que são expandidos pelo shell?

Por exemplo:

➜ time sleep $(sleep 3; echo 1)
sleep $(sleep 3; echo 1)  0.00s user 0.00s system 0% cpu 1.003 total

ignora o tempo do comando substituído.

Como medir o tempo total para obter quatro segundos como saída?

    
por arekolek 30.06.2016 / 13:44

2 respostas

4

A resposta foi mais simples do que eu pensava que seria. Crédito para John B , pode-se usar um sub-shell (...) para isso:

➜ time (sleep $(sleep 3; echo 1))
( sleep $(sleep 3; echo 1); )  0.00s user 0.00s system 0% cpu 4.007 total
    
por 30.06.2016 / 13:53
0

Isso acontece em zsh:

$ zsh -c 'time sleep $(sleep 3; echo 1)'
sleep $(sleep 3; echo 1)  0,00s user 0,00s system 0% cpu 1,001 total

Mas não no bash (ou ksh):

$  bash -c 'time sleep $(sleep 3; echo 1)'

real    0m4.003s
user    0m0.000s
sys     0m0.000s

Uma solução simples será usar alguns do agrupamento:

$ zsh -c 'time ( sleep $(sleep 3; echo 1); )'
( sleep $(sleep 3; echo 1); )  0,00s user 0,00s system 0% cpu 4,003 total
    
por 01.07.2016 / 07:40