Bash sleep in milliseconds

匆匆过客 提交于 2019-12-21 03:23:09

问题


I need a timer which will work with milliseconds. I tried to use sleep 0.1 command in script I see error message:

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

When I run sleep 0.1 in terminal it works fine.

Please help me!

EDIT: Sorry I have take an mistake:

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

Line sleep 0.1 was 5th and SECS=$[$SECS-0.1] was 6th. I just garbled lines. The problem was in 6th line, because bash can't work with float numbers. I changed my function as below:

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

回答1:


Make sure you're running your script in Bash, not /bin/sh. For example:

#!/usr/bin/env bash
sleep 0.1

In other words, try to specify the shell explicitly. Then run either by: ./foo.sh or bash foo.sh.

In case, sleep is an alias or a function, try replacing sleep with \sleep.




回答2:


Some options:

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

or

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



回答3:


Bash was complaining about decimal values,

read: 0.5: invalid timeout specification

I came around with this solution which works great.

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

sleep_fraction 0.01428


来源:https://stackoverflow.com/questions/32210152/bash-sleep-in-milliseconds

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!