【问题标题】:Bash sleep in milliseconds以毫秒为单位的 Bash 睡眠
【发布时间】:2015-11-19 12:29:43
【问题描述】:

我需要一个能以毫秒为单位的计时器。我尝试在脚本中使用sleep 0.1 命令,但看到以下错误消息:

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

当我在终端中运行 sleep 0.1 时,它工作正常。

请帮帮我!

编辑: 对不起,我犯了一个错误:

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

sleep 0.1 是第 5 行,SECS=$[$SECS-0.1] 是第 6 行。我只是乱码。问题出在第 6 行,因为 bash 不能处理浮点数。我改变了我的功能如下:

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

【问题讨论】:

  • 运行脚本的shell是什么?是/bin/sh 而不是/bin/bash?脚本甚至是 shell 脚本吗?
  • sleep 不会产生语法错误。请显示产生错误的最小脚本。
  • 请添加脚本的第一行并说明如何启动脚本。
  • @EtanReisner:没关系。 sleep 不是内置的 bash,因此无论您使用哪个 shell,sleep 0.1 都应该可以正常工作,只要您的 $PATH 中有合适的 sleep 命令即可。
  • 不要只向我们展示脚本的第一行。向我们展示整个脚本。如果可能,将其修剪为产生问题的简短的独立版本(如果它超过 5 行,您可能没有修剪得足够多)。 @赛勒斯

标签: bash timer sleep


【解决方案1】:

确保您在 Bash 中运行脚本,而不是 /bin/sh。例如:

#!/usr/bin/env bash
sleep 0.1

换句话说,尝试明确指定 shell。然后运行:./foo.shbash foo.sh

如果sleep 是别名或函数,请尝试将sleep 替换为\sleep

【讨论】:

    【解决方案2】:

    一些选项:

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

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

    【讨论】:

    • 读取:0.5:无效超时规范GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin14)
    【解决方案3】:

    Bash 抱怨十进制值,

    读取:0.5:无效超时规范

    我想到了this 解决方案,效果很好。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      相关资源
      最近更新 更多