2015-08-25 31 views
8

Potrzebuję timera, który zadziała z milisekundami. Próbowałem użyć polecenia sleep 0.1 w skrypcie widzę komunikat o błędzie:Bash spać w milisekundach

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

Kiedy biegnę sleep 0.1 w terminalu to działa dobrze.

Proszę, pomóżcie mi!

EDIT: Niestety muszę brać błąd:

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

Linia sleep 0.1 było 5 i SECS=$[$SECS-0.1] był 6-ta. Po prostu zniekształcałem linie. Problem polegał na szóstej linii, ponieważ bash nie może działać z liczbami zmiennoprzecinkowymi. Zmieniłem funkcję jak poniżej:

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

Co powłoka jest uruchomiony skrypt? Czy jest to '/ bin/sh', a nie'/bin/bash'? Czy skrypt jest nawet skryptem powłoki? –

+0

'sleep' nie spowoduje błędu składni. Pokaż minimalny skrypt, który powoduje błąd. – chepner

+0

Dodaj pierwszą linijkę skryptu i pokaż, w jaki sposób uruchamiasz skrypt. – Cyrus

Odpowiedz

12

Spróbuj:

#!/bin/bash 
sleep 0.1 

określając wyraźnie powłokę (również spróbować wymienić sleep z \sleep).

Następnie uruchom przez: ./foo.sh lub bash foo.sh.

1

Niektóre opcje:

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

lub

read -p "Continuing in 0.5 Seconds...." -t 0.5 
echo "Continuing ...."