Es ist vielleicht die Frage eines Neulings, aber ich verstehe nicht, wie dies konfiguriert ist und warum das Ausgabeformat des time
Befehls in diesen beiden Fällen unterschiedlich ist:
Bei Verwendung über time
besteht die Ausgabe aus drei Zeilen mit Basisinformationen
$ time sleep 1
real 0m1.003s
user 0m0.000s
sys 0m0.000s
dann kann ich herausfinden welche binärdatei verwendet wird
$ which time
/usr/bin/time
und rufen Sie es direkt auf, um eine Ausgabe in einem völlig anderen Format mit viel mehr Informationen zu erhalten
$ /usr/bin/time sleep 1
0.00user 0.00system 0:01.00elapsed 0%CPU (0avgtext+0avgdata 2000maxresident)k
0inputs+0outputs (0major+77minor)pagefaults 0swaps
Es gibt keine Aliase im Zusammenhang mit time
$ alias | grep time
$
Ich renne Ubuntu 16.04
.
which
ist im Grunde nutzlos ...Antworten:
Das erste ist das
bash
eigene integrierte Schlüsselworttime
(kompiliert mitbash
), und das zweite ist die externe ausführbare Dateitime
(/usr/bin/time
wird mit demtime
Paket geliefert ).Sie
which
können die integrierten Befehle oder Schlüsselwörter der Shell auch nicht anzeigen, da sie nur durchsucht werdenPATH
. Verwenden Sie hierfürtype
. Da es sich um eine selbst erstellte Shell handelt,type
kann zusätzlich nach internen Entitäten der Shell gesucht werden (und auchPATH
), sodass Sie den Unterschied erkennen können, indem Sie:Hier:
Der erste wird ausgeführt, wenn Sie nur verwenden
time
. Sie können auch ermitteln, was gerade ausgeführt wird, indem Sietype
(ohne-a
) verwenden:Der
-a
Befehltype
zum Suchen in den internen Entitäten der Shell undPATH
zB in allen möglichen Quellen.Wenn Sie aus irgendeinem Grund die externe benötigen, verwenden Sie eine der folgenden Möglichkeiten:
quelle
which
verstehe, berücksichtigt so nicht builtins? Und ich sollte immer zuerst nachsehentype -a
. Eigentlich, so scheint estype
überlegen ist ,which
weil es gibt Standort/usr/bin/time
als auchwhich
sinnvoll?type
ist in der Tat überlegen --- wenn Sie Bash verwenden. Eine andere Schale hat möglicherweise weder dastype
Bulitin noch dastime
Builtin.time
darf nur extern seintype
,type
ist jedoch nicht in allen POSIX-kompatiblen Shells verfügbar.Ein weiterer Unterschied zwischen dem eingebauten und dem externen Dienstprogramm besteht darin, dass das eingebaute Bash-Programm
time
Pipelines oder Aufrufe von Shell-Funktionen zeitlich abschließt (anscheinend sogar Schleifen, aber das Handbuch scheint das nicht zu versprechen). Das Externetime
kann nicht, da es sich außerhalb der Shell befindet, nichts über den umgebenden Code wissen.Während der Zeit spezifiziert in der Norm, ist es nicht spezifiziert links , wie es in einer Pipeline handeln sollte, so eine leistungsfähigere interne Implementierung wie dies möglich ist.
quelle