一時ファイルを作成するコマンド。
デフォルトでは/tmp
の中にファイルが生成されるが、セキュリティを考慮して自動でパーミッションが600になる。
生成された一時ファイルはサイズ0で、一時ファイルのパスが出力されるので、シェルスクリプトの中ではTMP=`mktemp`
のようにしてファイルパスを変数に保存して、あとはこのファイルを自由に書き込み/読み込みをすればよい。
-d
をつけるとファイルの代わりにディレクトリを作成できる。このときのパーミッションは700になる。
tempfile
というコマンドもあるらしい。
trap
コマンドを使って、シェルスクリプト終了時にに必ず削除されるようにするとよい。
例
tmpdir=$(mktemp -d)trap "rm -rf $tmpdir" EXIT # 最後に実行されるコマンドを登録# ここでいろいろ処理
trap
は外部コマンドではなくshの組み込みコマンドである。
trap
で指定しても、シェルスクリプトがexecで別のコマンドに移ってしまうと実行されない。exec 2>&1
のような、execでもそのシェルスクリプトにとどまったままだとtrap
は生きたままになる。
mkfifo
とmktemp
を組み合わせる。
$ mkfifo `mktemp -u`
ただし、これだと複数のプロセスで同時にそれぞれの名前付きパイプを作ろうとした場合に、mktemp
が偶然同じ名前にしてしまって、衝突するリスクがある。