Für den Vergleich der Laufzeiten von Skripten zwischen verschiedenen Shells empfehlen einige SE-Antworten die Verwendung bash
des integrierten time
Befehls wie folgt:
time bash -c 'foo.sh'
time dash -c 'foo.sh'
... usw. , damit jede Shell getestet werden kann. Solche Benchmarks eliminieren nicht die Zeit, die jede Shell benötigt, um sich selbst zu laden und zu initialisieren . Angenommen, beide oben genannten Befehle wurden auf einem langsamen Gerät mit der Lesegeschwindigkeit einer frühen Diskette gespeichert (124 KB / s) dash
(eine ausführbare Datei mit ~ 150 KB), die etwa 7x schneller als die Shell bash
( ~ 1 MB ) geladen würde Die Ladezeit würde die time
Zahlen verzerren - die Vorladezeiten dieser Schalen sind für die Messung der Laufzeiten foo.sh
unter jeder Schale nach dem Laden der Schalen irrelevant .
Was ist das beste tragbare und allgemeine Dienstprogramm für das Skript-Timing, das in jeder Shell ausgeführt werden kann? Der obige Code würde also ungefähr so aussehen:
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
NB: keine Shell integrierten time
Befehle, da keine portabel oder allgemein sind.
Besser noch, wenn der Util auch die Zeit messen kann, die die internen Befehle und Pipelines einer Shell benötigen, ohne dass der Benutzer sie zuerst in ein Skript einbinden muss. Eine künstliche Syntax wie diese würde helfen:
general_timer_util "while read x ; do echo x ; done < foo"
Einige Muscheln time
können das schaffen. Zum Beispiel bash -c "time while false ; do : ; done"
funktioniert. Um zu sehen, was auf Ihrem System funktioniert (und was nicht), versuchen Sie Folgendes:
tail +2 /etc/shells |
while read s ; do
echo $s ; $s -c "time while false ; do : ; done" ; echo ----
done
/usr/bin/time
?