
Das ist vielleicht eine Neulingsfrage, aber ich verstehe nicht, wie dies konfiguriert wird 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 grundlegenden Informationen
$ time sleep 1
real 0m1.003s
user 0m0.000s
sys 0m0.000s
dann kann ich nachschauen, 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 mittime
$ alias | grep time
$
Ich renne Ubuntu 16.04
.
Antwort1
Das erste ist das bash
eigene integrierte Schlüsselwort von time
(kompiliert mit bash
), und das zweite ist die externe ausführbare Datei time
( /usr/bin/time
, ist im time
Paket enthalten).
Außerdem which
können die integrierten Befehle oder Schlüsselwörter der Shell nicht angezeigt werden, da nur nach gesucht wird. Sie müssen dafür PATH
verwenden . Da es selbst ein integriertes Shell-Element ist, kann es zusätzlich nach internen Entitäten der Shell (und auch ) suchen, sodass Sie den Unterschied folgendermaßen erkennen können:type
type
PATH
type -a time
Hier:
$ type -a time
time is a shell keyword
time is /usr/bin/time
Der erste wird ausgeführt, wenn Sie einfach verwenden time
. Sie können auch herausfinden, was ausgeführt wird, indem Sie einfach verwenden type
(ohne -a
):
type time
Dies -a
weist darauf hin type
, dass in den internen Entitäten der Shell und auch PATH
in allen möglichen Quellen gesucht werden soll.
Wenn Sie aus irgendeinem Grund die externe Version benötigen, verwenden Sie eine der folgenden Optionen:
\time
"time"
'time'
command time
Antwort2
Ein weiterer Unterschied zwischen den integrierten und externen Dienstprogrammen besteht darin, dass die integriertentime
wird komplette Pipelines zeitlich planenoder Aufrufe von Shell-Funktionen (anscheinend sogar Schleifen, aber das Handbuch scheint das nicht zu versprechen). Das Externe time
kann das nicht, da es sich außerhalb der Shell befindet und nichts über den umgebenden Code weiß.
bash$ time echo blah | sleep 3
real 0m3.002s
...
bash$ /usr/bin/time echo blah | sleep 3
0.00user 0.00system 0:00.00elapsed ?%CPU
...
bash$ time for x in 1 2 3 ; do sleep 1 ; done
real 0m3.006s
...
Während die ZeitangegebenIm Standard ist nicht angegeben, wie es in einer Pipeline agieren soll, sodass eine leistungsfähigere interne Implementierung wie diese möglich ist.