在LinuxBash中,一定数量的睡眠将永远持续

在LinuxBash中,一定数量的睡眠将永远持续,linux,bash,ubuntu,floating-point,sleep,Linux,Bash,Ubuntu,Floating Point,Sleep,我正在Ubuntu13.04中编写一个bash脚本,它需要通过参数睡眠特定的秒数。 我已确保sleep允许在文档中查找浮点数: 与大多数要求数字为整数的实现不同,此处数字可以是任意浮点数 事实上,它适用于某些价值观。例如,“0.1”、“0.01”、“0.02”、“0.03”或“0.4”都可以,但对于其他值,如“0.04”或“0.05”,则可以永久使用 我是说, 这将有助于: sleep 0.03 。。。但这将永远持续下去: sleep 0.04 有人知道为什么吗 谢谢大家! 可能是sleep

我正在Ubuntu13.04中编写一个bash脚本,它需要通过参数睡眠特定的秒数。 我已确保sleep允许在文档中查找浮点数:

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

事实上,它适用于某些价值观。例如,“0.1”、“0.01”、“0.02”、“0.03”或“0.4”都可以,但对于其他值,如“0.04”或“0.05”,则可以永久使用

我是说, 这将有助于:

sleep 0.03
。。。但这将永远持续下去:

sleep 0.04
有人知道为什么吗


谢谢大家!

可能是sleep命令的错误

您也可以使用bash实现,直到修复该bug为止,在脚本上创建此别名,但如果要模拟所有功能,请参见
sleep--help

alias sleep='read -t'
现在试一试:

date +"%S.%N"; sleep 0.04; date +"%S.%N";
这已经在ubuntu 12.10上运行了

编辑:这不太精确,但如果您不需要sleep命令的额外功能,也可以使用:

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'

如果您使用“env sleep”而不是“sleep”,会发生什么?您是否调用了另一个终端并运行top和ps来查看发生了什么?你可能还想把它放在launchpad中,作为可能的Ubuntu错误或问题。我在12.04上试过,睡眠0.04有效。因此,这可能是Ubuntu中的一个bug。在这里不可复制,我在
sleep
中抛出的任何值都会按预期工作。env sleep也会挂起。我在12.10版中试用过,它确实有效,实际上它看起来像一个运行
strace sleep 0.04
@user1031431的13.04错误。正如你在评论中所说,它在另一台13.10机器上有效,你应该检查
sleep--version
(我的是8.13)。除此之外,我猜你的硬件可能有问题。但当3ppl(直到现在)投票支持你的问题时,我也可以考虑一个错误的cpu版本,但这可能是太多的猜测。。。