出力を/tmp
の固定名ファイルにリダイレクトするとセキュリティリスクになる可能性があることを読みました。攻撃者(または不正なコンテンツ)がスクリプトを実行したときにファイル/tmp/tmpfileformyscript.tmp
が作成されたことに気付いた場合(スクリプトへの読み取りアクセス権がない場合)、たとえば、シンボリックリンクln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmp
を作成すると、スクリプトを実行したときに.bashrc
ファイルが破棄されます。
代わりに、filename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"
のようなものを使用できます。
ただし、キャッシングにtmpファイルを使用したい場合があります。その場合、「tmpfile.tmp。*」が/tmp
のいずれかに一致するかどうかを知りたい場合は、作成するのではなく、そのファイルを使用します。新しいもの。残念ながら、test
および同等の[ -f filename ]
は、私の知る限り、ファイルグロビングをサポートしていません。
したがって、私の質問は2つあります。
"predictablename.$RANDOM"
は許容できる方法ですか、それともより優れた(より安全で簡単な)方法がありますか?predictablename
をチェックして、ファイルに簡単にアクセスしたり、ファイルの存在を後で確認したりするにはどうすればよいですか?mktempはこのために設計されました。 manページから:
TMPFILE=`mktemp /tmp/example.XXXXXXXXXX` || exit 1
echo "program output" >> $TMPFILE
mktempはファイルを作成するか、ゼロ以外の終了ステータスで終了します。論理or(||)は、mktempがファイルを作成できない場合にスクリプトが確実に終了するようにします。このコマンドの後、ファイルが使用可能であることを確認できます。再度確認する必要はありません。追加する必要があるのは、スクリプトの最後にあるファイルのクリーンアップだけです。
また、おそらくスクリプトがシグナルによって終了した場合も同様です。それが必要かどうかはあなたが決めなければならないことです。
どちらもtrap
コマンドを使用して実行できます。