お兄ちゃん!
/tmp
配下に一時ファイルを作ると
名前がかぶって困ることがあるんだ!
/tmp
配下は誰でもファイルを作れるので
名前がかぶることはあるとは思うんだけど…
どうしたらいいかな?
いくつか方法があるよ
今回は一時ファイルを
作る方法を学ぼう!
$
変数$
変数には
PID はプロセスの
一意となる番号だったよね
PID を名前に含めれば
問題を解決できそう!
以下のように
したらどうだろう?
#!/bin/bash
# 一時ファイル作成
TEMP_FILE="/tmp/${0##*/}.$$"
touch "$TEMP_FILE"
# 一時ファイルを使う処理
...
# 一時ファイル削除
rm "$TEMP_FILE"
${0##*/}.$$
でスクリプト名.シェルのPID
という一時ファイル名にしているんだ!これならかぶる心配がなさそうだね!mktemp
コマンド$
変数を使えば名前がかぶる心配はほぼ無くなるけどゼロではないんだ厳密なスクリプトだと困ることがありそうだね
mktemp
は名前がかぶらない一時ファイルを作るよmktemp [オプション]... テンプレート文字列
オプション | 役割 |
---|---|
-d | ファイルではなくディレクトリを作成 |
テンプレート文字列
はどう書くのかな?普通のパスのように書けるよただし大文字の
X
が連続している箇所は一意となる文字列に置き換えられるんだ作られたファイル名はどうやって知るのかな?
作成されたファイル名は標準出力に出力されるんだなのでコマンド置換
$( ... )
と一緒に使うといいよmktemp
で一時ファイルを作る例を見てみよう!#!/bin/bash
# 一時ファイル作成
TEMP_FILE="$(mktemp "/tmp/${0##*/}.XXXXXXXX")"
# 一時ファイルを使う処理
...
# 一時ファイル削除
rm "$TEMP_FILE"
今回は一時ファイルの作り方を学んだよ!固定された名前はかぶる可能性があるので
$
変数の値を名前に含めたりmktemp
を使うんだ!スクリプト実行中に一時ファイルを作る場合はこれらを活用しよう!「一時ファイル」を 「一時ディレクトリ」に 置き換えても使えるよ