Je construis ma propre rom Android. Pour le construire, je dois exécuter
mka -j8 bacon
Cependant, je voulais mesurer le temps nécessaire pour le construire, alors j'ai utilisé
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon
Cela ne fonctionnera pas, car il dit
/usr/bin/time: cannot run mka: No such file or directory
Toute aide pour contourner cela, c'est apprécié! J'exécute xubuntu.
Éditer:
Pour une raison quelconque, utiliser make au lieu de mka fonctionne, mais utiliser mka est préférable.
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon
Edit 2: à partir du site Web de cyanogenmod
L'appel
$ source build/envsetup.sh
ou$ . build/envsetup.sh
depuis votre shell exécute le script envsetup.sh dans le répertoire de construction. envsetup.sh ajoute de nombreuses fonctions à l'environnement de génération, dont les plus importantes sont répertoriées ci-dessous.
source build/evnsetup.sh
est la commande que j'exécute avant d'exécuter le temps. L'une de ces fonctions ajoutées par evnsetup.sh est mka
, est-il possible d'appeler cela depuis la time
commande?
Edit 3: Sortie de type 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
}
la source
source build/evnsetup.sh
, au point où vous souhaitez appelertime mka -j8 bacon
, pouvez-vous publier la sortie de la commandetype mka
?Réponses:
Le problème est qu'il
mka
s'agit d'une fonction bash exportée par votre script et non d'un exécutable (par opposition àmake
), donc/usr/bin/time
ne la trouve pas, car elle recherche un exécutable.Il y a deux solutions possibles.
Tout d'abord, notez qu'il existe une différence entre la fonction intégrée bash
time
et l'exécutable/usr/bin/time
. Ce sont des commandes différentes, qui prennent différents paramètres et génèrent des sorties différentes:Tapez
help time
pour obtenir de l'aide pour le bash intégrétime
. Tapezman time
pour obtenir de l'aide sur l'exécutable/usr/bin/time
.La première solution utilise
time
, tandis que la deuxième solution utilise/usr/bin/time
.Première solution: utiliser la fonction intégrée bash
time
La fonction intégrée bash
time
connaît les fonctions bash déclarées et vous pouvez immédiatement l'utiliser pour mesurer le temps de ces fonctions.Dans votre cas, la commande suivante devrait fonctionner:
Ce serait ma façon préférée. Cependant, il peut ne pas générer exactement la sortie souhaitée. En particulier, il ne mesure ni n'imprime l'utilisation du processeur.
Deuxième solution: utiliser l'exécutable
/usr/bin/time
Vous ne pouvez pas mesurer directement le temps d'une fonction bash intégrée à l'aide
/usr/bin/time
(pour autant que je sache), mais ce que vous pouvez faire est de mesurer le temps de l'/bin/bash
exécutable exécutant cette fonction bash. C'est un peu hacky, et cela génère un peu de surcharge lorsque vous lancez une instance supplémentaire debash
. Mais cette surcharge peut être négligeable face à une fonction qui prend quelques minutes à calculer, elle peut donc toujours mieux répondre à vos besoins.Pour pouvoir lancer l'
/bin/bash
exécutable sur une fonction bash, nous devons d'abord exporter la fonction.Par conséquent, dans votre cas, pour pouvoir utiliser
/usr/bin/time
et générer le format de sortie que vous souhaitez, vous pouvez procéder comme suit:la source
-f
paramètre, je n'ai pas pu trouver cela. Deuxièmement, qu'est-ce que / bin / bash? J'apprécie beaucoup!-f
paramètre àexport
indiqueexport
d'exporter une fonction shell. Tu voishelp export
. Le-f
paramètre à/usr/bin/time
indique/usr/bin/time
d'attendre une chaîne de format, mais je suppose que vous le savez. La/bin/bash
partie de la dernière commande est l'exécutable bash dont le temps d'exécution est réellement mesuré, lorsqu'il exécute lui-même lamka
fonction exportée . Il exécute lamka
fonction car il lit et exécute lamka -j8 bacon
commande à partir de l'entrée standard, c'est pourquoi nous utilisonsecho
un canal. Désolé pour la réponse tardive, lisez juste ceci. :)