web-dev-qa-db-fra.com

Bash dormir en millisecondes

J'ai besoin d'une minuterie qui fonctionnera avec des millisecondes. J'ai essayé d'utiliser la commande sleep 0.1 dans le script. Je vois un message d'erreur:

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

Quand je lance sleep 0.1 dans le terminal cela fonctionne bien.

Aidez-moi, s'il vous plaît!

EDIT: Désolé j'ai pris une erreur:

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

La ligne sleep 0.1 était 5ème et SECS=$[$SECS-0.1] était 6ème. Je viens de brouiller les lignes. Le problème était en 6ème ligne, parce que bash ne peut pas fonctionner avec des nombres flottants. J'ai changé ma fonction comme ci-dessous:

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

Assurez-vous que vous exécutez votre script dans Bash et non pas /bin/sh. Par exemple:

#!/usr/bin/env bash
sleep 0.1

En d'autres termes, essayez de spécifier explicitement le shell. Puis exécutez soit par: ./foo.sh ou bash foo.sh.

Si sleep est un alias ou une fonction, essayez de remplacer sleep par \sleep.

22
kenorb

Quelques options:

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

ou 

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

Bash se plaignait des valeurs décimales, 

read: 0.5: spécification de délai d'attente non valide 

Je suis venu avec ce solution qui fonctionne très bien.

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

sleep_fraction 0.01428
0
Evhz