Existe uma maneira de medir o tempo gasto em cada comando dentro de um arquivo bash? Portanto, coloque tempo antes de cada comando. A quantidade de comandos é desconhecida no momento, pois pretendo usar essa medida de tempo para futuros scripts bash também. E também vale a pena mencionar que pretendo executar apenas scripts bash simples com command1, command2, command3, ... etc. Portanto, nenhum script de lógica superior complexo.
Digamos que eu tenha um arquivo bash semelhante a este:
#!/bin/bash
mv /path/to/file /other/path/
cd /other/path/
tar -xzf /other/path/file
Existe uma maneira de obter alguma saída semelhante a esta?
6.553s mv /path/to/file /other/path/
0.057s cd /other/path/
19.088s tar -xzf /other/path/file
Eu sei que com time
posso obter o tempo gasto de um único comando. Mas estou procurando uma solução para medir o tempo de cada comando em si.
Você pode usar
/usr/bin/time
com a opção-f
como no exemplo a seguir. Preceda cada comando em seu shellscript com/usr/bin/time -f "%E %C"
Consulte
man time
para mais detalhes.Exemplo:
Fiz um pequeno script, que pode funcionar para modificar um shellscript simples
/usr/bin/time
, identificando comandos, que podem ser testados com . Vamos usar o nometime2script
.Usando
time2script
no exemplo na pergunta editada:Redirect para criar um shellscript modificado,
Esta é a abordagem ingênua. Tem alguns pontos de falha*, então não necessariamente recomendo o uso, só queria mencionar.
Exemplo de script foo.sh:
Exemplo de execução:
* Por exemplo
eval
, vai engasgar com comandos multi-linha, como declarações de função, declarações de array, heredocs, até aspas multi-line. E os comandos que dependem do valor de$0
podem não funcionar.