Chciałbym wyświetlić czas zakończenia skryptu.
Obecnie robię to -
#!/bin/bash
date ## echo the date at start
# the script contents
date ## echo the date at end
Ten program to czas rozpoczęcia i zakończenia skryptu. Czy byłoby możliwe wyświetlanie drobnoziarnistych danych wyjściowych, takich jak czas procesora / czas io itp.?
Odpowiedzi:
Po prostu użyj,
time
gdy wywołasz skrypt:źródło
real
,user
isys
. Ich znaczenie znajduje się tutaj .time $( ... ) >> out.txt
time (command1 && command2)
Jeśli
time
nie ma takiej opcji,źródło
date
dwa razy, na przykład, więc może w najlepszym uzyskać dokładność milisekundy w praktyce, a prawdopodobnie mniej), spróbuj użyćdate +%s.%N
. (%N
to nanosekundy od całej sekundy.)date +%s%N
lub użyj czegoś bardziej zdolnegobc
do obliczenia rzeczywistego czasu działania z dwóch wartości, jak sugeruje jwchew. Mimo to uważam, że takie podejście nie jest optymalne;time
jest znacznie lepszy, jeśli jest dostępny, z powodów opisanych powyżej.bc
a następnie wykonaj następujące czynności:runtime=$( echo "$end - $start" | bc -l )
echo "Duration: $((($(date +%s)-$start)/60)) minutes
Wystarczy
times
wyjść bez argumentów po wyjściu ze skryptu.Za pomocą
ksh
lubzsh
możesz także użyćtime
zamiast tego. Za pomocązsh
,time
da Ci także zegar ścienny oprócz czasu użytkownika i procesora systemu .Aby zachować status wyjścia skryptu, możesz go zrobić:
Możesz też dodać pułapkę na
EXIT
:W ten sposób czasy będą wywoływane przy każdym wyjściu powłoki i zachowaniu statusu wyjścia.
Należy również pamiętać, że wszystko
bash
,ksh
izsh
posiada$SECONDS
specjalną zmienną, która zostaje automatycznie zwiększana co drugi. W obuzsh
iksh93
, że zmienna może być również wykonane zmiennoprzecinkowej (Ztypeset -F SECONDS
), aby uzyskać większą precyzję. Jest to tylko zegar ścienny, a nie czas procesora.źródło
time
podejściu zaprezentowanemu wcześniej. - - Myślę, żetimeit
podejście przedstawione w kodzie MATLAB może być przydatne tutaj.times
że nie daje czasu na ścianę, prawda? na przykładbash -c 'trap times EXIT;sleep 2'
Jestem trochę spóźniony na modę, ale chciałem opublikować moje rozwiązanie (dla precyzji poniżej sekundy) na wypadek, gdyby inni natknęli się na ten wątek podczas wyszukiwania. Dane wyjściowe mają format dni, godzin, minut, a na koniec sekund:
Mam nadzieję, że ktoś tam uzna to za przydatne!
źródło
date
nie obsługuje precyzji poniżej sekundy i po prostu doda dosłowne „N
” do znacznika czasu.dt2=$(echo "$dt%86400" | bc)
. Tylko mówię ... BTW Wolę formę,dt2=$(bc <<< "${dt}%86400")
ale to całkowicie osobista.Moja metoda na
bash
:źródło
Tak, to wywołuje Python, ale jeśli możesz z tym żyć, jest to całkiem fajne, zwięzłe rozwiązanie.
źródło
python
polecenia w podpowłoce i odczytanie jego wyniku zajmie kilka milionów nanosekund w większości obecnych systemów. To samo dotyczy bieganiadate
.To pytanie jest dość stare, ale próbując znaleźć mój ulubiony sposób zrobienia tego, ten wątek pojawił się wysoko ... i jestem zaskoczony, że nikt o nim nie wspominał:
„perf” to narzędzie do analizy wydajności zawarte w jądrze pod „tools / perf” i często dostępne do zainstalowania jako osobny pakiet („perf” w CentOS i „linux-tools” w Debian / Ubuntu). Wiki systemu Linux Kernal perf zawiera o wiele więcej informacji na ten temat.
Uruchamianie „perf stat” podaje sporo szczegółów, w tym średni czas wykonania na samym końcu:
źródło
perf
?perf stat
teraz skarży się na „Możesz nie mieć pozwolenia na zbieranie statystyk”. chyba że uruchomisz kilka poleceńsudo
, co czyni go bezużytecznym we wszystkich scenariuszach, w których nie jesteś całkowicie właścicielem maszyny docelowej.Mała funkcja powłoki, którą można dodać przed komendami, aby zmierzyć ich czas:
Następnie użyj go w skrypcie lub w wierszu poleceń w następujący sposób:
źródło
s=$(date +%s000)
, nie jestem pewien, czy to działa.Oto odmiana odpowiedzi Alexa. Zależy mi tylko na minutach i sekundach, ale chciałem też, żeby był inaczej sformatowany. Więc zrobiłem to:
źródło
źródło
date
przed i po skrypcie i generują różnicę między nimi?Używając tylko basha można również zmierzyć i obliczyć czas trwania części skryptu powłoki (lub czas, jaki upłynął dla całego skryptu):
teraz możesz po prostu wydrukować różnicę:
jeśli potrzebujesz tylko przyrostowego czasu trwania:
Możesz także zapisać czas trwania w zmiennej:
źródło
Osobiście lubię zawijać cały mój kod skryptu w jakąś funkcję „główną”, taką jak:
Zauważ, jak łatwe jest użycie
time
polecenia w tym scenariuszu. Oczywiście nie mierzysz dokładnego czasu, w tym czasu analizy skryptu, ale uważam, że jest on wystarczająco dokładny w większości sytuacji.źródło
źródło
Funkcja synchronizacji oparta na
SECONDS
ograniczeniu do szczegółowości drugiego poziomu nie korzysta z żadnych zewnętrznych poleceń:Na przykład:
daje
źródło