以毫秒为单位的 Bash 睡眠
Posted
技术标签:
【中文标题】以毫秒为单位的 Bash 睡眠【英文标题】:Bash sleep in milliseconds 【发布时间】: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 行,您可能没有修剪得足够多)。 @赛勒斯
【参考方案1】:
确保您在 Bash 中运行脚本,而不是 /bin/sh
。例如:
#!/usr/bin/env bash
sleep 0.1
换句话说,尝试明确指定 shell。然后运行:./foo.sh
或 bash 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
【讨论】:
以上是关于以毫秒为单位的 Bash 睡眠的主要内容,如果未能解决你的问题,请参考以下文章