【发布时间】:2019-07-25 06:46:54
【问题描述】:
我有一个简单的 shell 脚本设置为每 X 秒捕获一次图像。由于某种原因,X 的值似乎每次循环都会翻倍。
#!/bin/bash
# basic setup for time-lapse
SECONDS=1
while true
do
DATE=$(date +"%Y-%m-%d_%H%M%S")
filename=${DATE}_img.jpg
# fswebcam -r 1280x720 --timestamp "%a %Y-%b-%d %H:%M (%Z)" /home/pi/JPGS/$filename
date
echo "pausing for ${SECONDS} seconds"
sleep $SECONDS
date
echo "====="
done
这是我得到的输出。 SECONDS 的值没有在循环内被操纵,所以我对这里发生的事情感到困惑。另外,原来的间隔是 30 秒,为了测试,我把它改成了 1 秒,日期调用也是为了测试/调试。
Sun Mar 3 17:51:57 CST 2019
pausing for 1 seconds
Sun Mar 3 17:51:58 CST 2019
=====
Sun Mar 3 17:51:58 CST 2019
pausing for 2 seconds
Sun Mar 3 17:52:00 CST 2019
=====
Sun Mar 3 17:52:00 CST 2019
pausing for 4 seconds
Sun Mar 3 17:52:04 CST 2019
=====
Sun Mar 3 17:52:04 CST 2019
pausing for 8 seconds
Sun Mar 3 17:52:12 CST 2019
=====
Sun Mar 3 17:52:12 CST 2019
pausing for 16 seconds
Sun Mar 3 17:52:28 CST 2019
=====
Sun Mar 3 17:52:28 CST 2019
pausing for 32 seconds
Sun Mar 3 17:53:00 CST 2019
=====
Sun Mar 3 17:53:00 CST 2019
pausing for 64 seconds
Sun Mar 3 17:54:04 CST 2019
=====
Sun Mar 3 17:54:04 CST 2019
pausing for 128 seconds
我在这里错过了什么?
这是在树莓派下
【问题讨论】:
-
当您使用
ALLCAPS变量时,任何时候发生一些奇怪的事情,检查man bash或info bash以确保您没有使用特殊的变量名(这也是使用变量名的原因不鼓励在ALLCAPS中......) -
下次我会记得检查一下。。编写脚本有一段时间了,以前从未遇到过这个特定的环境变量。感谢您提供有关检查 @DavidC.Rankin 的提示
-
快 20 年了,我只模糊地记得埋在手册页中的
SECONDS。必须确定:) -
@Levon 常见的 shell 编程约定是只对导出的变量使用全部大写的名称以避免这种问题。
-
谢谢@EdMorton .. 我得再读一读。我大部分时间都在使用 t/csh,我最近才转换为 bash。我对 bash 中用于设置变量的导出命令一直不太清楚,这将使我了解更多。
标签: bash shell loops variables raspberry-pi