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