在某些数字中睡觉会持续存在于Linux bash中

时间:2013-05-11 17:31:51

标签: linux bash ubuntu floating-point sleep

我正在Ubuntu 13.04中编写一个bash脚本,需要 sleep 参数传递的特定秒数。 我确保 sleep 允许查看文档中的浮点数:

  

与大多数需要NUMBER为整数的实现不同,此处NUMBER可以是任意浮点数。

确实它适用于某些价值观。例如,“0.1”,“0.01”,“0.02”,“0.03”或“0.4”都可以,但对于其他值,例如“0.04”或“0.05”,它会持续存在。

我是说, 这将有效:

sleep 0.03

......但这将永远持续下去:

sleep 0.04

有谁知道为什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

这可能是睡眠命令的错误......

您也可以使用bash实现,直到该错误得到修复,在您的脚本上创建此别名,但如果您想模拟所有功能,请参阅sleep --help

alias sleep='read -t'

现在尝试一下:

date +"%S.%N"; sleep 0.04; date +"%S.%N";

这已经适用于ubuntu 12.10。

编辑:这不太精确,但如果您不需要睡眠命令的额外功能,也可以正常工作:

function FUNCsleep() { 
  local delay=$1;
  local beginAt=`date +"%s.%N"`;
  while true; do 
    local now=`date +"%s.%N"`;
    if((`echo "($now-$beginAt)>=$delay" |bc -l`==1));then 
      break;
    fi;
  done;
}
alias sleep='FUNCsleep'