Ich baue mein eigenes Android-Rom. Um es zu bauen, muss ich laufen
mka -j8 bacon
Ich wollte jedoch die Zeit messen, die zum Erstellen benötigt wurde, also habe ich verwendet
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" mka -j8 bacon
Das läuft nicht, weil es heißt
/usr/bin/time: cannot run mka: No such file or directory
Jede Hilfe, um dies zu umgehen, ist willkommen! Ich laufe xubuntu.
Bearbeiten:
Aus irgendeinem Grund funktioniert die Verwendung von make anstelle von mka, jedoch ist die Verwendung von mka besser.
/usr/bin/time -f "User\t%U\nSys\t%S\nReal\t%E\nCPU\t%P" make -j8 bacon
Edit 2: von der Cyanogenmod-Website
Beim Aufrufen
$ source build/envsetup.sh
oder$ . build/envsetup.sh
über Ihre Shell wird das Skript envsetup.sh im Erstellungsverzeichnis ausgeführt. envsetup.sh fügt der Build-Umgebung viele Funktionen hinzu, von denen die wichtigsten unten aufgeführt sind.
source build/evnsetup.sh
ist der Befehl, den ich vor der Ausführung der Zeit ausführe. Eine dieser zusätzlichen Funktionen von evnsetup.sh ist mka
, ist es möglich, dies innerhalb des time
Befehls aufzurufen ?
Edit 3: Ausgabe vom Typ 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
}
quelle
source build/evnsetup.sh
an der Stelle, an der Sie aufrufen möchten,time mka -j8 bacon
die Ausgabe des Befehls veröffentlichentype mka
?Antworten:
Das Problem ist, dass
mka
es sich um eine von Ihrem Skript exportierte Bash-Funktion handelt und nicht um eine ausführbare Datei (im Gegensatz zumake
). Sie wird daher/usr/bin/time
nicht gefunden, da nach einer ausführbaren Datei gesucht wird.Es gibt zwei mögliche Lösungen.
Beachten Sie zunächst, dass es einen Unterschied zwischen der integrierten Bash-Funktion
time
und der ausführbaren Datei gibt/usr/bin/time
. Dies sind verschiedene Befehle, die unterschiedliche Parameter annehmen und unterschiedliche Ausgaben erzeugen:Geben Sie ein
help time
, um Hilfe für die integrierte Bash zu erhaltentime
. Geben Sie einman time
, um Hilfe für die ausführbare Datei zu erhalten/usr/bin/time
.Die erste Lösung verwendet
time
, während die zweite Lösung verwendet/usr/bin/time
.Erste Lösung: Verwenden der integrierten Bash-Funktion
time
Die integrierte Bash-Funktion
time
kennt deklarierte Bash-Funktionen, und Sie können sie sofort verwenden, um die Zeit solcher Funktionen zu messen.In Ihrem Fall sollte der folgende Befehl funktionieren:
Dies wäre mein bevorzugter Weg. Möglicherweise wird jedoch nicht genau die gewünschte Ausgabe generiert. Insbesondere wird die CPU-Auslastung nicht gemessen oder gedruckt.
Zweite Lösung: Verwenden der ausführbaren Datei
/usr/bin/time
Sie können die Zeit einer integrierten Bash-Funktion nicht direkt mit
/usr/bin/time
(soweit ich weiß) messen, aber Sie können die Zeit der/bin/bash
ausführbaren Datei messen, die diese Bash-Funktion ausführt. Dies ist ein wenig hackig und erzeugt einen kleinen Overhead, wenn Sie eine zusätzliche Instanz von startenbash
. Dieser Overhead kann jedoch vernachlässigbar sein, wenn Sie mit einer Funktion konfrontiert werden, deren Berechnung Minuten dauert, sodass er Ihren Anforderungen möglicherweise noch besser entspricht.Um die
/bin/bash
ausführbare Datei für eine Bash-Funktion starten zu können , müssen wir zuerst die Funktion exportieren.In Ihrem Fall können
/usr/bin/time
Sie daher wie folgt vorgehen, um das gewünschte Ausgabeformat verwenden und generieren zu können :quelle
-f
Parameter, ich konnte dies nicht finden. Zweitens, was macht / bin / bash? Schätze es wirklich!-f
Parameter zumexport
Anweisenexport
, eine Shell-Funktion zu exportieren. Siehehelp export
. Der-f
Parameter to/usr/bin/time
sagt/usr/bin/time
, dass eine Formatzeichenfolge erwartet werden soll, aber ich gehe davon aus, dass Sie dies wissen. Der/bin/bash
Teil des letzten Befehls ist die ausführbare Bash-Datei, deren Ausführungszeit tatsächlich gemessen wird, wenn sie selbst die exportiertemka
Funktion ausführt . Es führt diemka
Funktion aus, weil es denmka -j8 bacon
Befehl von der Standardeingabe liest und ausführt , weshalb wirecho
eine Pipe verwenden. Entschuldigung für die späte Antwort, lesen Sie diese einfach. :)