Estoy construyendo mi propia rom de Android. Para construirlo, necesito ejecutar
mka -j8 bacon
Sin embargo, quería medir el tiempo que tardó en construirlo, así que usé
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon
Esto no funcionará, porque dice
/usr/bin/time: cannot run mka: No such file or directory
Se agradece cualquier ayuda para solucionar esto. Estoy ejecutando xubuntu.
Editar:
Por alguna razón, usar make en lugar de mka funciona, sin embargo, usar mka es mejor.
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon
Edición 2: del sitio web cyanogenmod
Invocando
$ source build/envsetup.sho$ . build/envsetup.shdesde su shell ejecuta el script envsetup.sh en el directorio de compilación. envsetup.sh agrega muchas funciones al entorno de compilación, las más importantes se enumeran a continuación.
source build/evnsetup.shes el comando que ejecuto antes de ejecutar el tiempo. Una de esas funciones agregadas por evnsetup.sh es mka, ¿es posible llamar a esto desde el timecomando?
Edición 3: Salida de 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
}
fuente

source build/evnsetup.sh, en el punto donde desea llamartime mka -j8 bacon, ¿puede publicar la salida del comandotype mka?Respuestas:
El problema es que
mkaes una función bash exportada por su script y no un ejecutable (a diferencia demake), por lo/usr/bin/timeque no la encuentra, ya que busca un ejecutable.Hay dos posibles soluciones.
Primero, tenga en cuenta que hay una diferencia entre la función incorporada bash
timey el ejecutable/usr/bin/time. Estos son comandos diferentes, que toman diferentes parámetros y generan diferentes resultados:Escriba
help timepara obtener ayuda para el bash incorporadotime. Escribaman timepara obtener ayuda para el ejecutable/usr/bin/time.La primera solución usa
time, mientras que la segunda solución usa/usr/bin/time.Primera solución: usar la función incorporada bash
timeLa función incorporada bash
timees consciente de las funciones bash declaradas, y puede usarla inmediatamente para medir el tiempo de dichas funciones.En su caso, el siguiente comando debería funcionar:
Esta sería mi forma preferida. Sin embargo, es posible que no genere exactamente la salida que desea. En particular, no mide ni imprime el uso de la CPU.
Segunda solución: usar el ejecutable
/usr/bin/timeNo puede medir directamente el tiempo de una función bash incorporada utilizando
/usr/bin/time(hasta donde yo sé), pero lo que puede hacer es medir el tiempo del/bin/bashejecutable que ejecuta esa función bash. Esto es un poco hacky, y genera un poco de sobrecarga al iniciar una instancia adicional debash. Pero esta sobrecarga puede ser insignificante cuando se enfrenta a una función que requiere minutos para calcular, por lo que aún puede satisfacer mejor sus necesidades.Para poder
/bin/bashejecutar el ejecutable en una función bash, primero tenemos que exportar la función.Por lo tanto, en su caso, para poder usar
/usr/bin/timey generar el formato de salida que desee, puede proceder de la siguiente manera:fuente
-fparámetro, no pude encontrar esto. En segundo lugar, ¿qué significa / bin / bash? ¡Realmente lo aprecio!-fparámetro aexportle diceexporta exportar una función de shell. Verhelp export. El-fparámetro to/usr/bin/timedice/usr/bin/timeque espere una cadena de formato, pero supongo que ya lo sabe. La/bin/bashparte del último comando es el ejecutable bash, cuyo tiempo de ejecución se mide realmente, cuando ejecuta lamkafunción exportada . Ejecuta lamkafunción porque lee y ejecuta elmka -j8 baconcomando a partir de la entrada estándar, por lo que usamosechoy una tubería. Perdón por la respuesta tardía, solo lea esto. :)