Warum variiert das Ausgabeformat der Zeit, je nachdem, wie ich sie aufrufe?

Warum variiert das Ausgabeformat der Zeit, je nachdem, wie ich sie aufrufe?

Das ist vielleicht eine Neulingsfrage, aber ich verstehe nicht, wie dies konfiguriert wird und warum das Ausgabeformat des timeBefehls in diesen beiden Fällen unterschiedlich ist:

Bei Verwendung über timebesteht 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 basheigene integrierte Schlüsselwort von time(kompiliert mit bash), und das zweite ist die externe ausführbare Datei time( /usr/bin/time, ist im timePaket enthalten).

Außerdem whichkönnen die integrierten Befehle oder Schlüsselwörter der Shell nicht angezeigt werden, da nur nach gesucht wird. Sie müssen dafür PATHverwenden . 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:typetypePATH

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 -aweist darauf hin type, dass in den internen Entitäten der Shell und auch PATHin 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 timekann 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.

verwandte Informationen