別の(「アプリケーション」)スクリプトの一時ファイルを使用して、ワークセット全体を処理する再利用可能な(「ユーティリティ」)スクリプトを作成する必要があります。
- 作る
- 生成された一時ファイルを追跡します。
- 終了(定期的なユーザーの完了と中断)をキャプチャし、生成されたすべてのアイテムを削除します。
各アプリケーションスクリプトは、使用するすべてのサブスクリプトに対して一度呼び出すいくつかの「デフォルト」スクリプトに依存するのではなく、ユーティリティスクリプト自体を「含める」必要があります。
重要な要件は、ユーティリティスクリプトを使用するアプリケーションスクリプトが互いに呼び出すことができ、各スクリプトが順番に一時ファイルを使用する必要があることです。スクリプト間のすべての呼び出しは
./some_script.sh
そして
. ./some_script.sh
一部のスクリプトはエラーコードで終了し、他のスクリプトは明示的に終了しませんexit
。アプリケーションスクリプト自体は、サブシェルを使用してコマンドラインから呼び出すことができます。たとえば、次のようになります。
echo "Parameter" |
./feed_parameter_to_script.sh script_using_tmps.sh
理想的には、アプリケーションスクリプトは独自のコードでサブシェルから一時ファイルの生成を呼び出すことができますが、これは必須ではありません。
私が見つけた唯一の解決策は各スクリプトが独自にtmp削除を実行できるようにする、これは私の要件の項目3を満たしていません。
私のような要件のベストプラクティスは何ですか?
ベストアンサー1
スクリプトがそれ自体が混乱している部分をクリーンアップできない場合、これは理想的なベストプラクティスです。したがって、私が考えることができる次善策は、既知の場所に存在し、次のものを含むセマフォファイルを使用することです。各スクリプトがそのファイルを見つけるために必要なデータです。たとえば、
#!/bin/bash
if [[ -r $HOME/run/scratchfiles ]]; then
scratchfiles="$(cat $HOME/run/scratchfiles)"
else
scratchfiles=$(mktemp -d) && printf "%s" "$scratchfiles" > $HOME/run/scratchfiles
fi
[...]
不要になったファイルのクリーンアップを担当するスクリプトは、単に[[ -d "$scratchfiles" ]] && rm -fr "$scratchfiles"
上記を提供できます。