2013-06-06 15 views
17

Używam programu/usr/bin/time do mierzenia czasu dla polecenia. z parametrem --format i mogę sformatować dane wyjściowe. np./usr/bin/time - dane wyjściowe upłynęły w milisekundach

/usr/bin/time -f "%e" ls 

Czy istnieje sposób na uzyskanie większej dokładności upływających sekund? lub po prostu wyświetlać milisekundy, a nie sekundy?

W instrukcji/usr/bin/time mówi się tylko o sekundach, ale może jest jakiś sposób i ktoś może mi pomóc ... dzięki!

EDIT: Wiem o komendzie bash "time", która używa formatu zmiennej środowiskowej "TIMEFORMAT". przepraszam, ale nie chcę zmienić tego env-var ... wydaje mi się to ryzykowne, rozwiązanie powinno być czymś, co wcale nie zmienia działającego systemu :)

+0

Strona podręcznika nic o tym nie mówi. Zakładam więc, że nie jest to możliwe przy użyciu * niezmienionej * wersji czasu. Powinna istnieć możliwość stworzenia łaty dla formatu wyjściowego, ale nie wiem, czy możliwe jest uzyskanie większej dokładności. – hek2mgl

+0

Po prostu wskazuję przyszłym czytelnikom, że zmienna 'TIMEFORMAT' jest używana tylko do sterowania wyjściami wbudowanej komendy' time'. Nie ma ryzyka związanego z jego zmianą. –

Odpowiedz

26

Jedną z możliwości jest użycie polecenia date :

ts=$(date +%s%N) ; my_command ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds" 

%Nshould return nanoseconds i 1 milisekundę jest 1.000.000 nanosekundy, stąd przez podział wróci czas potrzebny do wykonania my_command w milisekundach.

UWAGA że %Nis not supported on all systems, but most of them.

+0

doskonała, akceptowana! nie myślałem o randce, ale to wystarczy! Aby uzyskać od nanosekund do milisekund, musisz podzielić przez 1000000, chociaż: ts = $ (data +% s% N); spać 1; tt = $ ((($ (data +% s% N) - $ ts)/1000000)); echo $ tt – Preexo

+0

prawo, należy podzielić przez "10^6", a nie "10^3". – devnull

+2

Dla tych na OSX bez wymaganej czasowej rozdzielczości od daty, można zastąpić natywną datę gdate. Na przykład: 'napar zainstalować coreutils' jeśli to konieczne, a następnie ' ts = $ (gdate +% s% N); spać 1; tt = $ ((($ (gdate +% s% N) - $ ts)/1000000)); echo $ tt' [źródło] (http://apple.stackexchange.com/questions/135742/time-in-milliseconds-since-epoch-in-the-terminal) – snodnipper

5

Dla wygody zrobiłem odpowiedź devnull jest do skryptu (nazwałem to milisekundy-time).

#!/bin/bash 
ts=$(date +%s%N) ; [email protected] ; tt=$((($(date +%s%N) - $ts)/1000000)) ; echo "Time taken: $tt milliseconds" 

Scenariusz został umieszczony w /usr/local/bin.
Dałeś im prawa wykonywania chmod +x /usr/local/bin/millisecond-time.
Teraz mogę go używać w następujący sposób: millisecond-time my_command

P.s. Byłby to komentarz, gdybym miał przedstawiciela ".

Powiązane problemy