每次 cronjob 运行脚本时,如何使用命令的输出更改 shell 脚本中变量的值?

每次 cronjob 运行脚本时,如何使用命令的输出更改 shell 脚本中变量的值?

我有一个运行 get 命令的脚本,并将输出存储在一个名为 的变量newvalue和一个名为的变量中oldvalue(手动在其中存储一些值)。然后用脚本进行减法newvalue - oldvalue并将结果存储在名为finalvalueand echo's Final value 的变量中。我必须每 4 小时使用 cron 作业运行此脚本并发送包含 echo of 的电子邮件finalvalue。到这里一切都工作正常。现在我希望这个脚本在完成发送电子邮件后oldvalue用值更新变量。意味着脚本运行时每 4 小时,它应该使用 lastnewvalue更改变量的值。请建议解决方法。oldvaluenewvalue

答案1

cron当您运行脚本时,无论是从命令行运行还是直接在命令行中运行,该脚本都会在其自己的环境中运行在其自己的“子shell”中。脚本执行期间设置的任何变量仅对脚本运行时。如果您随后再次运行相同的脚本,则它完全独立于第一次运行,并且第一次执行中的变量无法以某种方式生存并被第二次单独的执行所拾取。

因此,如果您需要在脚本的不同实例中保留一个值,则必须使用临时文件来存储它。只需将这样的内容添加到您的脚本中即可:

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

相关内容