Na mojej maszynie muszę wykonać cykl, który iteruje 1 proste polecenie, które musi mieć opóźnienie wyrażone w ułamkach sekundy.
Powiedzmy, że potrzebuję:
- aby zapisać plik z rosnącą enumaracją (plik-0, plik-1, plik-2, ...) wygeneruj przez coś trywialnego dla tego przykładu, na przykład
time > file-$x
- Muszę to robić co 1/70 sekundy (jako przykład), ponieważ chciałbym wyrazić swój czas ułamkami sekundy.
Jak mogę być bardzo precyzyjny i wszystko wyrażać za pomocą skryptu bash?
Ułamek może generować nieokreśloną ilość, muszę być precyzyjny, więc potrzebuję co najmniej 4-5 miejsc po przecinku.
Może możesz po prostu uciec
?
na mojej
archlinux
dystrybucji:źródło
sleep
dopuszcza ułamki? czy możesz podać pełny przykład z fałszywą pętlą?Spawnowanie procesu i ładowanie nowego pliku wykonywalnego może potrwać kilka milisekund, więc taka precyzja nie ma sensu. Należy również pamiętać, że czas procesora w wielu systemach jest alokowany do procesów w odstępach do 10 ms.
To powiedziawszy, niektóre
sleep
implementacje zajmują ułamkowe liczby sekund, a zarówno zsh, jak i ksh93 mogą tworzyć swoją$SECONDS
specjalną zmienną ułamkowątypeset -F SECONDS
.Przykład (zsh):
Ups, dryfował. Możesz dostosować czas snu na podstawie
$SECONDS
:Te 2 dodatkowe milisekundy należy prawdopodobnie uwzględnić przy uruchamianiu ostatniego polecenia
sleep
idate
poleceń.Zauważ też, że zsh ma
zselect
wbudowany limit czasu wyrażony w setnych sekundach. A ksh93 masleep
wbudowane (i akceptuje zmiennoprzecinkowe) iprintf
może drukować datę / godzinę.Jeśli chcesz czegoś bardziej precyzyjnego, prawdopodobnie będziesz chciał systemu operacyjnego w czasie rzeczywistym lub systemu operacyjnego z funkcjami w czasie rzeczywistym i na pewno nie użyje powłoki.
źródło
sleep 1/70
niedozwolone na mojej maszynie ...Jeśli twoja skorupa
sleep
nie przyjmuje frakcji, użyj perla.Jeśli chcesz znaleźć frakcję, użyj
echo "scale=5; 1/70" | bc
źródło
W Alpine Linux (Busybox) możesz zapętlać mikrosekundy
usleep 10
(równowartość0.00001
sekundy)GNU sleep
obsługuje ułamki sekundy:sleep 0.00001
źródło