getコマンドを実行し、出力を変数newvalue
と変数に保存するスクリプトがありますoldvalue
(手動でいくつかの値を保存します)。次にスクリプトを使用して減算を実行しnewvalue - oldvalue
、結果をfinalvalue
echoという変数と最終値に保存します。 4時間ごとにcronジョブを使用してこのスクリプトを実行し、エコーを含むEメールを送信する必要がありますfinalvalue
。ここまでは、すべてがうまく機能しています。これで、このスクリプトが電子メールを送信した後、oldvalue
変数を値に更新したいと思います。つまり、スクリプトの実行中に4時間ごとにnewvalue
lastを使用して変数の値を変更する必要があります。解決策を提案してください。oldvalue
newvalue
答え1
cron
コマンドラインからでもコマンドラインからでもスクリプトを実行すると、スクリプトは自分の環境の独自の「サブシェル」で実行されます。スクリプトの実行中に設定されたすべての変数は、次にのみ有効です。それスクリプトが実行されるとき。後で同じスクリプトを再実行すると、最初の実行とは完全に独立しており、最初の実行の変数は何とか保持されず、2番目の別々の実行から選択されます。
したがって、スクリプトの複数のインスタンスで値を保持する必要がある場合は、一時ファイルを使用して値を保存する必要があります。スクリプトに次の内容を追加するだけです。
oldValue=$(cat /path/to/temp/file);
newValue=$(whatever gives you the new value)
finalValue=$((newvalue - oldvalue))
echo "$finalValue" > /path/to/temp/file