一時ファイルを処理するためのもう少しポータブルな方法は、を使用することmktemp
です。一時ファイルが作成され、パスが返されます。例えば:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
スクリプトで非常に簡単に使用できます。
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
manページを読むと、必要に応じてオプションを設定できるはずです。例えば:
-d
ファイルの代わりにディレクトリを作成します。
-u
名前を生成しますが、何も作成しません。
を使用-u
すると、一時ディレクトリを非常に簡単に取得できます...
$ tmpdir=$(dirname $(mktemp -u))
詳細についてmktemp
は、こちらをご覧ください。
Mac OS Xに関する編集: Mac OSXシステムを使用したことはありませんが、以下のTyiloのコメントによると、Mac OSX mktemp
ではテンプレート(Linuxのオプション引数)を提供する必要があるようです。引用:
テンプレートには、たとえば、いくつかの「X」が追加された任意のファイル名を指定できます/tmp/temp.XXXX
。末尾の「X」は、現在のプロセス番号や一意の文字の組み合わせに置き換えられます。mktempが返すことができる一意のファイル名の数は、提供される「X」の数に依存します。6つの「X」により、mktempは56800235584の1つ(62 ** 6)の可能なファイル名を選択します。
また、manページには、この実装がOpenBSDのmanページに触発されていると書かれていますmktemp
。そのため、OpenBSDとFreeBSDのユーザーも同様の相違が見られる場合があります(歴史のセクションを参照)。
おそらくお気づきかもしれませんが、この場合、質問で探している一時ディレクトリを含む完全なファイルパスを指定する必要があります。この小さな問題は、-t
スイッチを使用して処理できます。このオプションには引数(prefix
)が必要なようですmktemp
が$TMPDIR
、必要なときに依存するように見えます。
全体として、上記と同じ結果を得ることができるはずです...
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
このソリューションを自分でテストすることはできないため、Mac OS Xユーザーからのフィードバックは大歓迎です。
${TMPDIR-/tmp}
Unixライクで使用するだけです。TMPDIR
(システム、管理者、またはユーザーによって)/tmp
一時ファイルに使用しない場合を通知します。