Auf meinem Computer muss ein Zyklus ausgeführt werden, der 1 einfachen Befehl durchläuft, dessen Verzögerung in Sekundenbruchteilen ausgedrückt werden muss.
Sagen wir, ich brauche:
- um eine datei mit zunehmender enumaration (datei-0, datei-1, datei-2, ...) zu speichern, erzeugen sie für dieses beispiel etwas triviales wie
time > file-$x
- Ich muss dies alle 1/70 Sekunde tun (als Beispiel), weil ich meine Zeit mit Sekundenbruchteilen ausdrücken möchte.
Wie kann ich wirklich präzise sein und alles mit einem Bash-Skript ausdrücken lassen?
Der Bruch kann eine unbestimmbare Größe erzeugen, ich muss genau sein und brauche mindestens 4-5 Dezimalstellen.
Vielleicht kannst du einfach rennen
?
auf meinem
archlinux
Distribution:quelle
sleep
erlaubt Brüche? Können Sie ein vollständiges Beispiel mit einer gefälschten Schleife anbieten?Das Spawnen eines Prozesses und das Laden einer neuen ausführbaren Datei dauert wahrscheinlich einige Millisekunden, sodass eine solche Genauigkeit nicht wirklich Sinn macht. Beachten Sie auch, dass die CPU-Zeit auf vielen Systemen den Prozessen durch Slices von bis zu 10 ms zugewiesen wird.
Allerdings
sleep
dauern einige Implementierungen Bruchzahlen von Sekunden, und sowohl zsh als auch ksh93 können ihre$SECONDS
spezielle Variable mit fraktionierentypeset -F SECONDS
.Beispiel (zsh):
Hoppla, es ist gewandert. Sie können die Schlafzeit einstellen, basierend auf
$SECONDS
:Diese 2 zusätzlichen Millisekunden sind wahrscheinlich für die Ausführung der Befehle last
sleep
und zu berücksichtigendate
.Beachten Sie auch, dass in zsh eine
zselect
Zeitüberschreitung in Hundertstelsekunden eingebaut ist. Und ksh93 hatsleep
eingebaut (und akzeptiert Gleitkommazahlen) undprintf
kann Datum / Uhrzeit ausgeben.Wenn Sie genauere Informationen benötigen, benötigen Sie wahrscheinlich ein Echtzeitbetriebssystem oder ein Betriebssystem mit Echtzeitfähigkeiten, und Sie benötigen mit Sicherheit keine Shell.
quelle
sleep 1/70
auf meinem Rechner nicht erlaubt ...Wenn Ihre Shell
sleep
keinen Bruch akzeptiert, verwenden Sie Perl.Wenn Sie den Bruch herausfinden müssen, verwenden Sie
echo "scale=5; 1/70" | bc
quelle
Unter Alpine Linux (Busybox) können Sie eine Schleife für Mikrosekunden mit
usleep 10
(entspricht0.00001
einer Sekunde) ausführen.GNU sleep
unterstützt Bruchteile von Sekunden:sleep 0.00001
quelle