Как изменить значение переменной в скрипте оболочки с помощью вывода команды каждый раз, когда скрипт запускается cronjob?

Как изменить значение переменной в скрипте оболочки с помощью вывода команды каждый раз, когда скрипт запускается cronjob?

У меня есть скрипт, запускающий команду get и сохраняющий вывод в переменной с именем newvalueи еще одной переменной с именем oldvalue(вручную сохраняющий некоторое значение в ней). Затем скрипт вычитает newvalue - oldvalueи сохраняет результат в переменной с именем finalvalueи окончательное значение echo. Мне нужно запускать этот скрипт с помощью задания cron каждые 4 часа и отправлять электронное письмо, содержащее echo из finalvalue. До сих пор все работало нормально. Теперь я хочу, чтобы этот скрипт обновлял oldvalueпеременную со значением newvalueпосле того, как он закончит отправку электронного письма. То есть каждые 4 часа при запуске скрипта он должен менять значение переменной oldvalueс последним newvalue. Пожалуйста, предложите обходной путь.

решение1

Когда вы запускаете скрипт, независимо от того, запускаете ли вы его из cronкомандной строки или напрямую в ней, этот скрипт работает в своей собственной "подоболочке", в своей собственной среде. Любые переменные, заданные во время выполнения скрипта, видны толькочтоскрипт во время его выполнения. Если затем вы снова запустите тот же скрипт, он будет полностью независим от первого запуска, и нет никакой возможности для переменной из первого выполнения каким-либо образом выжить и быть подхваченной вторым, отдельным выполнением.

Поэтому, если вам нужно сохранить значение в разных экземплярах скрипта, вам придется использовать временный файл для его хранения. Просто добавьте что-то вроде этого в свой скрипт:

oldValue=$(cat /path/to/temp/file);
newValue=$(whatever gives you the new value)
finalValue=$((newvalue - oldvalue))
echo "$finalValue" > /path/to/temp/file

Связанный контент