以精确的 1 秒增量输出到终端(来自 bash 脚本)
Output to terminal (from bash script) in precise, 1-second increments
我不久前写了一篇 kitchen timer for the terminal(不幸的是,目前仅限 macOS)。它 运行s 持续指定的时间段,然后退出并发出铃声:
它通过循环某些逻辑 n 次(其中 n 是指定的秒数),调整终端输出来实现和 sleep
ing for 1s in each loop.
我注意到它实际上比指定的时间要长一点:
$ time timer 0.05
[13:18] Time expired
real 0m3.289s
user 0m0.118s
sys 0m0.098s
$ time timer 0.1
[13:18] Time expired
real 0m6.362s
user 0m0.134s
sys 0m0.127s
$ time timer 0.2
[13:19] Time expired
real 0m12.496s
user 0m0.166s
sys 0m0.183s
看起来围绕每个 sleep 1
的所有逻辑都需要少量时间,并且在 15 分钟的时间段内,这些毫秒加起来。当我将定时器设置为以重复间隔响铃时(例如, 无限期地每十五分钟响一次),然后我可以在上午 11 点启动它,让它在 11:15 和 11:30 等,但到了一天结束时,它会在 4:07 和 4:22 或类似的地方响起。
关于如何 运行 一个计时器,一次更新一秒的输出,但忠实地测量很长的时间跨度,有什么想法吗?
对于 C 而言,这是否比 bash 脚本更好?
怎么样:
#!/bin/bash
now=$( date +%s )
remain=$(( * 60 )) # supply minute(s) in integer as an argument
finish=$(( $now + $remain ))
while [ $remain -gt 0 ]; do
remain=$(( $finish - $( date +%s ) ))
mm=$(( $remain / 60 ))
ss=$(( $remain - $mm * 60 ))
printf "%02d:%02d" $mm $ss
sleep 1
echo -ne "\r"
done
# ring a bell or tell something here
从长远来看,它基本上是准确的,但显示的时钟偶尔会跳一秒以吸收累积的时差。我不确定这种现象是否可以接受。
我不久前写了一篇 kitchen timer for the terminal(不幸的是,目前仅限 macOS)。它 运行s 持续指定的时间段,然后退出并发出铃声:
它通过循环某些逻辑 n 次(其中 n 是指定的秒数),调整终端输出来实现和 sleep
ing for 1s in each loop.
我注意到它实际上比指定的时间要长一点:
$ time timer 0.05
[13:18] Time expired
real 0m3.289s
user 0m0.118s
sys 0m0.098s
$ time timer 0.1
[13:18] Time expired
real 0m6.362s
user 0m0.134s
sys 0m0.127s
$ time timer 0.2
[13:19] Time expired
real 0m12.496s
user 0m0.166s
sys 0m0.183s
看起来围绕每个 sleep 1
的所有逻辑都需要少量时间,并且在 15 分钟的时间段内,这些毫秒加起来。当我将定时器设置为以重复间隔响铃时(例如, 无限期地每十五分钟响一次),然后我可以在上午 11 点启动它,让它在 11:15 和 11:30 等,但到了一天结束时,它会在 4:07 和 4:22 或类似的地方响起。
关于如何 运行 一个计时器,一次更新一秒的输出,但忠实地测量很长的时间跨度,有什么想法吗?
对于 C 而言,这是否比 bash 脚本更好?
怎么样:
#!/bin/bash
now=$( date +%s )
remain=$(( * 60 )) # supply minute(s) in integer as an argument
finish=$(( $now + $remain ))
while [ $remain -gt 0 ]; do
remain=$(( $finish - $( date +%s ) ))
mm=$(( $remain / 60 ))
ss=$(( $remain - $mm * 60 ))
printf "%02d:%02d" $mm $ss
sleep 1
echo -ne "\r"
done
# ring a bell or tell something here
从长远来看,它基本上是准确的,但显示的时钟偶尔会跳一秒以吸收累积的时差。我不确定这种现象是否可以接受。