cronjobがスクリプトを実行するたびにコマンド出力を使用してシェルスクリプトの変数値を変更するにはどうすればよいですか?

cronjobがスクリプトを実行するたびにコマンド出力を使用してシェルスクリプトの変数値を変更するにはどうすればよいですか?

getコマンドを実行し、出力を変数newvalueと変数に保存するスクリプトがありますoldvalue(手動でいくつかの値を保存します)。次にスクリプトを使用して減算を実行しnewvalue - oldvalue、結果をfinalvalueechoという変数と最終値に保存します。 4時間ごとにcronジョブを使用してこのスクリプトを実行し、エコーを含むEメールを送信する必要がありますfinalvalue。ここまでは、すべてがうまく機能しています。これで、このスクリプトが電子メールを送信した後、oldvalue変数を値に更新したいと思います。つまり、スクリプトの実行中に4時間ごとにnewvaluelastを使用して変数の値を変更する必要があります。解決策を提案してください。oldvaluenewvalue

ベストアンサー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

おすすめ記事