it-swarm.com.de

Tiefschlaf in Millisekunden

Ich brauche einen Timer, der mit Millisekunden arbeitet. Ich habe versucht, den Befehl sleep 0.1 im Skript zu verwenden. Es wird folgende Fehlermeldung angezeigt:

syntax error: invalid arithmetic operator (error token is ".1")

Wenn ich sleep 0.1 im Terminal laufen lasse, funktioniert es gut.

Bitte hilf mir!

EDIT: Sorry, ich habe einen Fehler gemacht:

function timer
{
while [[ 0 -ne $SECS ]]; do
    echo "$SECS.."
    sleep 0.1
    SECS=$[$SECS-0.1]
done
}

Zeile sleep 0.1 war 5. und SECS=$[$SECS-0.1] war 6.. Ich habe nur Zeilen verstümmelt. Das Problem lag in der 6. Zeile, da bash nicht mit Float-Zahlen arbeiten kann. Ich habe meine Funktion wie folgt geändert:

MS=1000
function timer
{
while [[ 0 -ne $MS ]]; do
    echo "$SECS.."
    sleep 0.1
    MS=$[$MS-100]
done
}
10
Noqrax

Stellen Sie sicher, dass Sie Ihr Skript in Bash ausführen, nicht /bin/sh. Zum Beispiel:

#!/usr/bin/env bash
sleep 0.1

Versuchen Sie also, die Shell explizit anzugeben. Führen Sie dann entweder Folgendes aus: ./foo.sh oder bash foo.sh.

Falls sleep ein Alias ​​oder eine Funktion ist, versuchen Sie, sleep durch \sleep zu ersetzen.

22
kenorb

Einige Optionen:

read -p "Pause Time .5 seconds" -t 0.5

oder 

read -p "Continuing in 0.5 Seconds...." -t 0.5
echo "Continuing ...."
3
Jose H. Rosa

Bash beschwerte sich über Dezimalzahlen, 

gelesen: 0.5: ungültige Timeout-Angabe 

Ich kam mit dieser Lösung, die großartig funktioniert.

sleep_fraction() {
  /usr/bin/Perl -e "select(undef, undef, undef, $1)"
}

sleep_fraction 0.01428
0
Evhz