переменная bash удваивается в значении - почему? - PullRequest
0 голосов
/ 04 марта 2019

У меня есть простой сценарий оболочки, настроенный для захвата изображений каждые 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

Что мне здесь не хватает?

Это под Raspberry Pi

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

$SECONDS на самом деле является специальной Bash Variable для определения количества секунд, в течение которых выполнялся скрипт.Поскольку это таймер, он автоматически увеличивается каждую секунду, а скрипт ничего не делает.Просто измените имя переменной на другое, и все будет в порядке.

0 голосов
/ 04 марта 2019

Выберите другое имя для $SECONDS.

$SECONDS - это встроенная переменная оболочки.Он увеличивается до количества секунд с момента запуска оболочки.

Из руководства Bash :

'SECONDS'

Эта переменнаяувеличивается до количества секунд с момента запуска оболочки.Присвоение этой переменной сбрасывает счет до присвоенного значения, и расширенное значение становится присвоенным значением плюс количество секунд с момента присвоения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...