シェルで一時ファイルを使用する前に一時ファイルをクリーンアップできますか?

シェルで一時ファイルを使用する前に一時ファイルをクリーンアップできますか?

私のプログラムがクラッシュした場合、一時ファイルを避けたいと思います。

UNIXの驚くべきことは、ファイルを削除した後でもファイルを開いたままにできることです。

だからファイルを開いたら、時々削除してくださいそれから処理速度が遅い場合、プログラムがクラッシュしても、ユーザーがファイルをクリーンアップする必要がない可能性があります。

シェルでは、私はしばしば次のようなものを見る:

generate-the-file -o the-file
[...loads of other stuff that may use stdout or not...]
do_slow_processing < the-file
rm the-file

ただし、プログラムがクラッシュした場合、rmユーザーはクラッシュする前にプログラムをクリーンアップする必要がありますthe-file

Perlでは、次のことができます。

open(my $filehandle, "<", "the-file") || die;
unlink("the-file");
while(<$filehandle>) {
  # Do slow processing stuff here
  print;
}
close $filehandle;

これにより、ファイルが開くとすぐに削除されます。

シェルにも同様の構造がありますか?

ベストアンサー1

これはcsh、tcsh、sh、ksh、zsh、bash、ash、sashでテストされました。

echo foo > the-file
(rm the-file; cat) < the-file | do_slow_processing
do_other_stuff

または必要に応じて:

(rm the-file; do_slow_processing) < the-file
do_other_stuff

興味深いことに、fifoでも動作します。

mkfifo the-fifo
(rm the-fifo; cat) < the-fifo | do_slow_processing &
echo foo > the-fifo

コンテンツが作成されるまでリーダーがブロックされるからです。

おすすめ記事