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
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?
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
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
Tags time zsh shell command-substitution