Estou construindo minha própria ROM Android. Para construí-lo, preciso executar
mka -j8 bacon
No entanto, eu queria medir o tempo que levou para construí-lo, então usei
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon
Isso não vai funcionar, porque está dizendo
/usr/bin/time: cannot run mka: No such file or directory
Qualquer ajuda para contornar isso, é apreciado! Estou executando o xubuntu.
Editar:
Por alguma razão, usar make em vez de mka funciona, no entanto, usar mka é melhor.
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon
Edição 2: no site cyanogenmod
A chamada
$ source build/envsetup.sh
ou a$ . build/envsetup.sh
partir do seu shell executa o script envsetup.sh no diretório de construção. O envsetup.sh adiciona muitas funções ao ambiente de construção, as mais importantes listadas abaixo.
source build/evnsetup.sh
é o comando que eu executo antes da hora de executar. Uma dessas funções adicionadas pelo evnsetup.sh é mka
: é possível chamar isso de dentro do time
comando?
Edit 3: Saída do tipo mka
$ type mka
mka is a function
mka ()
{
case `uname -s` in
Darwin)
make -j `sysctl hw.ncpu|cut -d" " -f2` "$@"
;;
*)
schedtool -B -n 1 -e ionice -n 1 make -j$(cat /proc/cpuinfo | grep "^processor" | wc -l) "$@"
;;
esac
}
fonte
source build/evnsetup.sh
, no ponto em que deseja chamartime mka -j8 bacon
, você pode postar a saída do comandotype mka
?Respostas:
O problema é que
mka
é uma função bash exportada pelo seu script e não um executável (ao contrário demake
), portanto/usr/bin/time
, não o encontra, pois procura um executável.Há duas soluções possíveis.
Primeiro, observe que há uma diferença entre a função interna do bash
time
e o executável/usr/bin/time
. Estes são comandos diferentes, que usam parâmetros diferentes e geram saídas diferentes:Digite
help time
para obter ajuda para o bash embutidotime
. Digiteman time
para obter ajuda para o executável/usr/bin/time
.A primeira solução usa
time
, enquanto a segunda solução usa/usr/bin/time
.Primeira solução: usando a função interna do bash
time
A função
time
interna do bash reconhece as funções declaradas do bash e você pode usá-lo imediatamente para medir o tempo de tais funções.No seu caso, o seguinte comando deve funcionar:
Este seria o meu caminho preferido. No entanto, pode não gerar exatamente a saída desejada. Em particular, ele não mede ou imprime o uso da CPU.
Segunda solução: usando o executável
/usr/bin/time
Você não pode medir diretamente o tempo de uma função bash interna usando
/usr/bin/time
(até onde eu sei), mas o que você pode fazer é medir o tempo do/bin/bash
executável executando essa função bash. Isso é um pouco hacky e gera um pouco de sobrecarga quando você inicia uma instância extra dobash
. Mas essa sobrecarga pode ser insignificante quando confrontada com uma função que leva alguns minutos para ser calculada, por isso ainda pode atender melhor às suas necessidades.Para poder iniciar o
/bin/bash
executável em uma função bash, precisamos exportar a função primeiro.Portanto, no seu caso, para poder usar
/usr/bin/time
e gerar o formato de saída desejado, você pode proceder da seguinte maneira:fonte
-f
parâmetro, não consegui encontrar isso. Segundo, o que / bin / bash? Realmente aprecio isso!-f
parâmetro paraexport
informaexport
para exportar uma função shell. Vejahelp export
. O-f
parâmetro to/usr/bin/time
diz/usr/bin/time
para esperar uma string de formato, mas presumo que você saiba. A/bin/bash
parte do último comando é o executável bash, cujo tempo de execução é realmente medido, quando ele próprio executa amka
função exportada . Ele executa amka
função porque lê e executa omka -j8 bacon
comando a partir da entrada padrão, e é por isso que usamosecho
um canal. Desculpe pela resposta tardia, basta ler isso. :)