Ist es ein Weg, um die Laufzeit des zuletzt ausgeführten Befehls in der shell?
Gibt es einen Befehl wie time
angezeigt werden können die laufende Zeit, die details der letzten oder in der Vergangenheit ausgeführte Befehle auf der shell?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, wie es in der bash, sondern in der zsh kann man definieren
preexec
undprecmd
Funktionen, so dass Sie speichern Sie die aktuelle Zeit an Variable$STARTTIME
(preexec) und$ENDTIME
(precmd), so werden Sie in der Lage zu finden, die Ungefähre Laufzeit. Oder Sie definieren eineaccept-line
- Funktion, so dass es " vorantime
vor jedem Befehl.UPDATE:
Dies ist der code gespeichert wird, verstrichene Zeit, in der
$_elapsed
array:Dann wenn Sie
sleep 10s
:Keine Notwendigkeit in vier Variablen. Keine Probleme mit Namen oder zusätzliche Verzögerungen. Beachten Sie, dass nur
$_elapsed
array können wachsen sehr groß, so dass Sie löschen müssen, um die ersten Elemente (dies geschieht mit dem folgenden Stück code:(( $#_elapsed > 1000 )) && set -A _elapsed $_elapsed[-1000,-1]
).UPDATE2:
Finden Sie das Skript zur Unterstützung zsh-Stil precmd und preexec in der bash. Vielleicht müssen Sie entfernen
typeset -ig
(ich habe nur die Kraft$_start
werden integer) und ersetzenset -A var ...
mitvar=( ... )
um sich diesem zu arbeiten. Und ich weiß nicht, wie die Scheibe arrays und Ihre Länge in der bash.Skript: http://www.twistedmatrix.com/users/glyph/preexec.bash.txt
UPDATE3:
Gefunden ein problem: wenn Sie hit zurück mit einer leeren Zeile preexec nicht ausgeführt wird, während precmd nicht, so erhalten Sie bedeutungslos Werte in
$_elapsed
array. Um dieses Problem zu beheben, ersetzen Sie dieprecmd
- Funktion mit dem folgenden code:EXTENDED_HISTORY
Möglichkeit die Robustheit zu verbessern? nur werfen ein adea. Ich habe nicht mehr als 10s von Gedanken hinein, und es ist über meine Zeit in den Ruhezustand (warten auf ein Skript beenden Ihre Arbeit).Edit 3:
Die Struktur dieser Antwort:
Die Antwort, gekennzeichnet durch seine Teile nach dem Umriss oben:
Teil 1 - die kurze Antwort ist "Nein"
Original
Nope, sorry. Verwenden Sie
time
.Teil 2 - vielleicht kann man daraus eine Folge
In einigen Fällen, wenn ein Programm schreibt die Ausgabe-Dateien oder Informationen in log-Dateien, können Sie vielleicht ableiten, Laufzeit, aber das ist auch Programm-spezifisch und nur eine grobe Schätzung. Wenn Sie HISTTIMEFORMAT legen Sie in Bash, kann man sich die Einträge in der history-Datei um eine Idee zu bekommen, wenn ein Programm gestartet. Aber die Endzeit ist nicht angemeldet, so konnten Sie nur ein Rückschluss auf die Dauer, wenn ein anderes Programm gestartet wurde, sofort nachdem Sie interessiert sind, fertig.
Teil 3 - eine Hypothese ist gefälscht
Hypothese: Idle-Zeit gezählt werden, in der die verstrichene Zeit
Edit:
Hier ist ein Beispiel, um zu illustrieren, was ich meine. Es basiert auf dem Vorschlag von ZyX, wäre aber ähnlich wie mit anderen Methoden.
In
zsh
:Nun warten wir... sagen wir mal für 15 Sekunden, dann:
Nun warten wir... sagen wir mal für 20 Sekunden, dann:
Wie Sie sehen können, ich war falsch. Die start-Zeit (1516) abzüglich der vorherigen Ende der Zeit (1506) ist die Dauer des Befehls (
sleep 10
). , Die auch zeigt, dass die Variablen, die ich verwendet, in die Funktionen brauchen einen besseren Namen.Hypothese verfälscht - es ist möglich, um die richtige verstrichene Zeit, ohne die idle-Zeit
Teil 4 - hack zu erfassen, die verstrichene Zeit von jeder Befehl
Edit 2:
Hier sind die Bash-äquivalente zu den Funktionen in ZyX ist Antwort (Sie brauchen das Skript verlinkt es):
Nach der Installation
preexec.bash
(aus dem verlinkten Skript) und die Schaffung der zwei oben genannten Funktionen, die beispielsweise laufen würde wie folgt Aussehen:Teil 5 - Abschluss
Verwenden
time
.Ich nehme an, Sie sind die Ausführung von Befehlen, die eine lange Zeit dauern und nicht bemerkt zu Beginn, dass Sie möchten, um die Zeit, wie lange Sie dauern. In der zsh, wenn Sie setzen Sie die Umgebungsvariable REPORTTIME, um eine Zahl, einen beliebigen Befehl an, die länger als diese Anzahl von Sekunden wird die Zeit, die gedruckt, als hätten Sie es mit dem time-Befehl vor. Sie können es in Ihr .der zshrc, so dass lange laufende Kommandos haben immer Ihre Zeit gedruckt. Beachten Sie, dass die Zeit mit schlafen verbracht (im Gegensatz zu user - /system-Zeit) ist nicht gezählt, gegenüber auslösen des timer, aber immer noch verfolgt.
Mag die Welt bewegt haben, auf ein wenig, da andere Menschen diese Fragen beantwortet.
zsh
hat einige eingebaute Funktionen, um die Zeit, wie lang die Befehle nehmen.Aktivieren Sie die inc_append_history_time option mit
setopt inc_append_history_time
Dann die Zeit, die zum ausführen von jedem Befehl gespeichert ist in Ihrer Geschichte und dann eingesehen werden können, mit
history -D
.Denke ich, kann man nur timing-Statistiken für Befehle, die Sie ausführen, verwenden Sie den Befehl 'time'.
Aus der man-page: