Ich möchte etwas in einer Linux-Shell unter verschiedenen Bedingungen ausführen und die Ausführungszeit jeder Ausführung ausgeben können.
Ich weiß, dass ich ein Perl- oder Python-Skript schreiben könnte, das dies tun würde, aber gibt es eine Möglichkeit, dies in der Shell zu tun? (was zufällig Bash ist)
Ticks
wie den Windows-Fall zu bekommen ?Antworten:
Verwenden Sie das integrierte
time
Schlüsselwort:Beispiel:
quelle
time -p i=x; while read line; do x=x; done < /path/to/file.txt
? Es gibt sofort 0,00 zurück, es sei denn, ich setze nichts vor die while-Schleife. Was gibt es?time
eine ganze Pipeline so wie sie ist zeitlich festgelegt werden kann (da es sich um ein Bash- Schlüsselwort handelt ), müssen Sie einen Gruppenbefehl ({ ...; ...; }
) verwenden, um mehrere Befehle zeitlich zu steuern:time -p { i=x; while read line; do x=x; done < /path/to/file.txt; }
type -a time
Sie können
time
mit der Zeit (1) viel detailliertere Informationen erhalten als die eingebaute Bash (die Robert Gamble erwähnt ) . Normalerweise ist das so/usr/bin/time
.Anmerkung des Herausgebers: Um sicherzustellen, dass Sie das externe Dienstprogramm
time
anstelle destime
Schlüsselworts Ihrer Shell aufrufen, rufen Sie es als auf/usr/bin/time
.time
ist ein von POSIX vorgeschriebenes Dienstprogramm , aber die einzige Option, die unterstützt werden muss, ist-p
.Bestimmte Plattformen implementieren bestimmte, nicht standardmäßige Erweiterungen: Funktioniert
-v
mit dem Dienstprogramm von GNUtime
, wie unten gezeigt (die Frage ist markiert)Linux); Die BSD / macOS-Implementierung verwendet-l
, um ähnliche Ausgaben zu erzeugen - sieheman 1 time
.Beispiel für eine ausführliche Ausgabe:
quelle
quelle
Versuchen Sie für eine zeilenweise Delta-Messung gnomon .
Sie können auch die Optionen
--high
und / oder verwenden--medium
, um einen Längenschwellenwert in Sekunden anzugeben, über dem Gnomon den Zeitstempel rot oder gelb hervorhebt. Und Sie können noch ein paar andere Dinge tun.quelle
Wenn Sie mehr Präzision wünschen, verwenden Sie
%N
mitdate
(und verwenden Siebc
für das Diff, da$(())
nur Ganzzahlen verarbeitet werden).So geht's:
Beispiel:
Ergebnis:
quelle
Wenn Sie die Zeiten später zum Berechnen verwenden möchten, erfahren Sie, wie Sie die
-f
Option zum Ausgeben von/usr/bin/time
zeitsparendem Code verwenden. Hier ist ein Code, den ich kürzlich verwendet habe, um die Ausführungszeiten einer ganzen Klasse von Schülerprogrammen abzurufen und zu sortieren:Ich habe später alle
$timefile
Dateien verkettet und die Ausgabe an einen Lua-Interpreter weitergeleitet . Sie können dasselbe mit Python oder Bash oder einer anderen Ihrer bevorzugten Syntax tun. Ich liebe diese Technik.quelle
/usr/bin/time
ist erforderlich, dawhich time
bei einer einfachen Ausführungtime
die Version Ihrer Shell ausgeführt wird, dietime
keine Argumente akzeptiert.env time
:-)Wenn Sie nur eine sekundengenaue Genauigkeit benötigen, können Sie die integrierte
$SECONDS
Variable verwenden, die die Anzahl der Sekunden zählt, die die Shell ausgeführt wurde.quelle
Sie können verwenden
time
und subshell()
:Oder in derselben Schale
{}
:quelle
(
&)
(neuer Kontext, Subshell ) und andere mit{
& verwendet}
(gleiche Shell, gleicher Kontext)Der Weg ist
Ausgabe ist >>
quelle
-lphtread
oder-o
Tags. Sie müssen nur dentime
Befehl verwenden, den die akzeptierte Antwort besser erklärt.Eine möglicherweise einfache Methode (die möglicherweise nicht den unterschiedlichen Benutzeranforderungen entspricht) ist die Verwendung der Shell PROMPT.it ist eine einfache Lösung, die in einigen Fällen hilfreich sein kann. Sie können die Bash-Eingabeaufforderungsfunktion wie im folgenden Beispiel verwenden:
Der obige Befehl führt dazu, dass die Shell-Eingabeaufforderung wie folgt geändert wird:
Jedes Mal, wenn Sie einen Befehl ausführen (oder die Eingabetaste drücken), um zur Shell-Eingabeaufforderung zurückzukehren, zeigt die Eingabeaufforderung die aktuelle Uhrzeit an.
Hinweise:
1) Beachten Sie, dass diese Zeit berücksichtigt werden muss, wenn Sie einige Zeit gewartet haben, bevor Sie Ihren nächsten Befehl eingeben. Dies bedeutet, dass die in der Shell-Eingabeaufforderung angezeigte Zeit der Zeitstempel ist, zu dem die Shell-Eingabeaufforderung angezeigt wurde, und nicht, wenn Sie den Befehl eingeben. Einige Benutzer drücken die Eingabetaste, um eine neue Eingabeaufforderung mit einem neuen Zeitstempel zu erhalten, bevor sie für den nächsten Befehl bereit sind.
2) Es gibt andere verfügbare Optionen und Modifikatoren, mit denen die Bash-Eingabeaufforderung geändert werden kann. Weitere Informationen finden Sie unter (man bash).
quelle