Dla porównania prowadzone razy skryptów między różnymi muszli, niektóre odpowiedzi SE sugerować przy użyciu bash
„s wbudowane time
polecenia, tak jak poniżej:
time bash -c 'foo.sh'
time dash -c 'foo.sh'
... itd. dla każdej powłoki do przetestowania. Takie odniesienia nie eliminuje czas potrzebny dla każdej muszli załadować i zainicjować sama . Załóżmy na przykład, że oba powyższe polecenia zostały zapisane na wolnym urządzeniu z prędkością odczytu wczesnej dyskietki (124KB / s) dash
( plik wykonywalny ~ 150K ) ładowałby się około 7 razy szybciej niż bash
( ~ 1M ) powłoka czas ładowania będzie pochylać się time
numery - czasów pre-loading tych pocisków nie ma znaczenia do pomiaru czasów pracy foo.sh
pod każdym skorupy po pociski zostały załadowane.
Jakie jest najlepsze przenośne i ogólne zastosowanie do uruchamiania taktowania skryptów, które można uruchomić z poziomu każdej powłoki? Tak więc powyższy kod wyglądałby mniej więcej tak:
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
Uwaga: brak wbudowanych time
poleceń powłoki , ponieważ żadne nie są przenośne ani ogólne.
Jeszcze lepiej, jeśli util jest również w stanie przeprowadzić analizę porównawczą czasu potrzebnego na wewnętrzne polecenia i potoki powłoki, bez konieczności uprzedniego zawijania ich przez skrypt w skrypcie. Sztuczna składnia taka jak ta pomogłaby:
general_timer_util "while read x ; do echo x ; done < foo"
Niektóre powłoki time
mogą sobie z tym poradzić. Na przykład bash -c "time while false ; do : ; done"
działa. Aby zobaczyć, co działa (i nie działa) w twoim systemie, spróbuj:
tail +2 /etc/shells |
while read s ; do
echo $s ; $s -c "time while false ; do : ; done" ; echo ----
done
/usr/bin/time
?