cronometrando a execução de um comando de origem

0

Estou tentando melhorar a execução dos meus dotfiles zsh e preciso executar a execução dos meus sub-scripts. Eu tenho uma seção de código no meu .zshrc com esta aparência:

typeset -U config_files
config_files=($DOTFILES/**/*.zsh)
for file in  ${(M)config_files}
do
    source file
done

O que eu gostaria de fazer é algo assim:

for file in  ${(M)config_files}
do
    \time -f %E source file
done

Mas, infelizmente, recebo esse tipo de resposta:

time: cannot run source: No such file or directory

Onde estou indo errado?

    
por Andrew Matthews 26.01.2018 / 09:24

2 respostas

1

source é um comando interno, não externo, portanto, usar o time externo para o tempo não faz sentido. Faça um dos seguintes:

TIMEFMT=%E
for file in  ${(M)config_files}
do
    time (source file)
done

Ou:

for file in  ${(M)config_files}
do
    \time -f %E zsh -c 'source "$1"' zsh "$file"
done

No primeiro, o subshell é necessário porque :

% bl0ck_qu0te%

E, no último caso, você está iniciando uma nova instância zsh para cada arquivo. Portanto, em ambos os casos, não há como sincronizar facilmente os scripts dependentes (por exemplo, quando um arquivo de configuração faz algo que é necessário ou de alguma forma afeta outro arquivo de configuração). Como alternativa, você pode salvar a saída de time após cada origem, o que lhe dará um tempo acumulado:

TIMEFMT=%E
{time} 2> times
for file in  ${(M)config_files}
do
    source file
    {time} 2>> times
done

Você pode usar awk ou algo assim para obter os tempos individuais:

awk 'NR != 1 {print $0 - prev} {prev = $0; getline}' times
    
por muru 26.01.2018 / 10:35
0

Eu olhei para o comando man time e anotei

Users of the bash shell need to use an explicit path in order to run
the external time command and not the shell builtin variant.  On system
where time is installed in /usr/bin, the first example would become

Então estou supondo que você deve fornecer um caminho para o tempo. Por favor note que eu não tenho experiência em zsh

    
por guiverc 26.01.2018 / 10:15