mktemp コマンド

一時ファイルを作成するコマンド。

デフォルトでは /tmp の中にファイルが生成されるが、セキュリティを考慮して自動でパーミッションが600になる。

生成された一時ファイルはサイズ0で、一時ファイルのパスが出力されるので、シェルスクリプトの中では TMP=`mktemp` のようにしてファイルパスを変数に保存して、あとはこのファイルを自由に書き込み/読み込みをすればよい。

-d をつけるとファイルの代わりにディレクトリを作成できる。このときのパーミッションは700になる。

tempfile というコマンドもあるらしい。

HOWTO

シェルスクリプトの中で一時ファイルを作って、スクリプト終了時に削除されるようにするには

trapコマンドを使って、シェルスクリプト終了時にに必ず削除されるようにするとよい。

tmpdir=$(mktemp -d)
trap "rm -rf $tmpdir" EXIT # 最後に実行されるコマンドを登録

# ここでいろいろ処理

trapは外部コマンドではなくshの組み込みコマンドである。

trap で指定しても、シェルスクリプトがexecで別のコマンドに移ってしまうと実行されない。 exec 2>&1 のような、execでもそのシェルスクリプトにとどまったままだと trap は生きたままになる。

一時的な名前付きパイプを作るには

mkfifomktemp を組み合わせる。

$ mkfifo `mktemp -u`

ただし、これだと複数のプロセスで同時にそれぞれの名前付きパイプを作ろうとした場合に、 mktemp が偶然同じ名前にしてしまって、衝突するリスクがある。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。